Hadoop

出自 ArchWiki

Apache Hadoop 是一个在由通用硬件构建的大型集群上运行应用程序的框架。 Hadoop 框架透明地为应用程序提供可靠性和数据移动。 Hadoop 实施了一种名为 Map/Reduce 的计算范例,其中应用程序被分成许多小的工作片段,每个片段都可以在集群中的任何节点上执行或重新执行。 此外,它还提供了一个分布式文件系统 (HDFS),用于将数据存储在计算节点上,从而在整个集群中提供非常高的聚合带宽。 MapReduce 和 Hadoop 分布式文件系统都经过设计,因此框架可以自动处理节点故障。

安装

安装 hadoopAUR 软件包。

配置

默认情况下,hadoop 已配置为伪分布式操作。 一些环境变量/etc/profile.d/hadoop.sh 中设置,其值与传统的 hadoop 不同。

环境变量 描述 权限
HADOOP_CONF_DIR /etc/hadoop 配置文件存储位置。 阅读
HADOOP_LOG_DIR /tmp/hadoop/log 日志文件存储位置。 读写
HADOOP_WORKERS /etc/hadoop/workers 命名远程 worker 主机的文件。 阅读
HADOOP_PID_DIR /tmp/hadoop/run pid 文件存储位置。 读写

您还应该正确设置以下文件。

/etc/hosts
/etc/hostname 
/etc/locale.conf

您需要在 /etc/hadoop/hadoop-env.sh 中告诉 hadoop 您的 JAVA_HOME,因为它不会自行假定它在 Arch Linux 中的安装位置

/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/lib/jvm/default

使用以下命令检查安装

$ hadoop version

HADOOP_WORKERS 选项之前称为 HADOOP_SLAVES。 如果您收到警告消息“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 官方文档

单机操作

默认情况下,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。 现在检查您是否可以在没有密码的情况下连接到 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

编辑 /etc/hadoop/core-site.xml 并添加以下配置

 <configuration>
   <property>
     <name>fs.defaultFS</name>
     <value>hdfs://127.0.0.1:9000</value>
   </property>
 </configuration>

启动 hadoop namenode

$ hadoop namenode

您可以通过 https://127.0.0.1:9870/ 访问 Web GUI

此文章或章节的事实准确性存在争议。

原因: 针对旧版本 Hadoop 的说明(在 Talk:Hadoop 中讨论)

启动 以下 hadoop systemd 单元:hadoop-datanodehadoop-jobtrackerhadoop-namenodehadoop-secondarynamenodehadoop-tasktracker

hadoop 守护程序日志输出被写入 ${HADOOP_LOG_DIR} 目录(默认为 /var/log/hadoop)。

浏览 NameNode 和 JobTracker 的 Web 界面; 默认情况下,它们位于

将输入文件复制到分布式文件系统

$ hadoop fs -put /etc/hadoop input

运行一些提供的示例

$ hadoop jar /usr/lib/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep input output 'dfs[a-z.]+'

检查输出文件

将输出文件从分布式文件系统复制到本地文件系统并检查它们

$ hadoop fs -get output output
$ cat output/*

在分布式文件系统上查看输出文件

$ hadoop fs -cat output/*

完成后,停止 守护程序 hadoop-datanodehadoop-jobtrackerhadoop-namenodehadoop-secondarynamenodehadoop-tasktracker