Hadoop (简体中文)
Apache Hadoop 是一个支持在商业硬件大型集群上运行应用程序框架。Hadoop框架透明地提供应用程序可靠性和数据传输。Hadoop实现了一个名为Map/Reduce计算模式,应用程序被划分成许多小片段,这些小片段可能在集群中的任何节点上被执行或反复执行。此外,它提供了一个分布式文件系统(HDFS)来存储在计算节点上的数据,它使集群有非常高的带宽。MapReduce和Hadoop分布式文件系统使框架能自行处理失效节点。
安装
安装 hadoopAUR包。
配置
默认情况下, hadoop已经被配置成伪分布模式。在一些不同环境下要修改文件 /etc/profile.d/hadoop.sh
中的和传统Hadoop不同的变量。
环境变量 | 至 | 描述 | 权限 |
---|---|---|---|
HADOOP_CONF_DIR |
/etc/hadoop
|
存放配置文件
|
Read |
HADOOP_LOG_DIR |
/tmp/hadoop/log
|
存放日志文件
|
Read and Write |
HADOOP_SLAVES |
/etc/hadoop/slaves
|
命名远程从属主机
|
Read |
HADOOP_PID_DIR |
/tmp/hadoop/run
|
存放pid文件
|
Read and Write |
你需要正确设置下列文件。
/etc/hosts /etc/hostname /etc/locale.conf
你必须在 /etc/hadoop/hadoop-env.sh
告诉hadoop你的JAVA_HOME因为它并不自己找它自己安装的的地方:
/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk/
用下面命令检查安装:
hadoop version
如果你得到警告信息"WARNING: HADOOP_SLAVES has been replaced by HADOOP_WORKERS. Using value of HADOOP_SLAVES." 那么用下面的语句替换掉替换掉/etc/profile.d/hadoop.sh
的 export HADOOP_SLAVES=/etc/hadoop/slaves
:
export HADOOP_WORKERS=/etc/hadoop/workers
单节点设置
独立操作
默认地, Hadoop被配置为非分布式模式,作为一个单独的Java进程. 这对调试很有帮助.
下面的例子复制了解压缩的conf目录来用作输入然后寻找并展示每个匹配正则表达式的结果。输出被写入给定的输出目录。
$ HADOOP_CONF_DIR=/usr/lib/hadoop/orig_etc/hadoop/ $ mkdir input $ cp /etc/hadoop/*.xml input $ hadoop jar /usr/lib/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.0.jar grep input output 'dfs[a-z.]+' $ cat output/*
伪分布式操作
Hadoop 能在伪分布式模式下运行在单一节点,这样每个hadoop守护进程运行在不同的Java进程.
默认地,hadoop将会以root用户运行。你可以改变默认用户,在 /etc/conf.d/hadoop
里的:
HADOOP_USERNAME="<your user name>"
设置无需密码的ssh
确定你的 sshd服务启用了, 或者用systemctl enable sshd
手动开启. 现在确定你能不用密码连接到localhost:
$ ssh localhost
如果你不能用ssh无密码连接到localhost, 执行下面的命令:
$ ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys $ chmod 0600 ~/.ssh/authorized_keys
确定/etc/ssh/sshd_config
文件里的下面这行被注释了
/etc/ssh/sshd_config
#AuthorizedKeysFile .ssh/authorized_keys
执行
格式化一个新的分布式文件系统:
$ hadoop namenode -format
开启hadoop守护进程:
# systemctl start hadoop-datanode # systemctl start hadoop-jobtracker # systemctl start hadoop-namenode # systemctl start hadoop-secondarynamenode # systemctl start hadoop-tasktracker
hadoop守护进程的日志输出写在 ${HADOOP_LOG_DIR}
目录(默认在 /var/log/hadoop
).
为NameNode和JobTracker流量网络接口; 默认它们在:
- NameNode - http://localhost:50070/
- JobTracker - http://localhost:50030/
复制输入文件到分布式文件系统:
$ hadoop fs -put /etc/hadoop input
运行一些提供的例子:
$ hadoop jar /usr/lib/hadoop/hadoop-examples-*.jar grep input output 'dfs[a-z.]+'
检查输出文件:
复制分布式文件系统的输出文件到本地文件系统并检查它们:
$ hadoop fs -get output output $ cat output/*
或者
在分布式文件系统浏览输出文件:
$ hadoop fs -cat output/*
当你结束后停止以下守护进程:
# systemctl stop hadoop-datanode # systemctl stop hadoop-jobtracker # systemctl stop hadoop-namenode # systemctl stop hadoop-secondarynamenode # systemctl stop hadoop-tasktracker