乐趣区

在Centos7上部署hadoop集群

Hadoop 踩坑记 (一)

在 Centos7 上部署 hadoop 集群

环境

机器 1(hadoop1-ali) 阿里云 (CentOS 7.3) 120.26.173.104

机器 2(hadoop2-hw) 华为云 (CentOS 7.4) 114.116.233.156

其中第一台服务器用作 namenode 第二台用作 datanode

修改 hostname 及 host 文件

分别在两台机器上执行

hostname hadoop1-ali
hostname hadoop2-hw

修改两台机器的 /etc/hosts (host 要带 s) 文件,添加以下内容

120.26.173.104 hadoop1-ali
114.116.233.156 hadoop2-hw

修改之后可以分别检查 host 是否生效

ping hadoop1-ali
ping hadoop2-hw

给两台机器生成秘钥文件

分别在两台机器上运行命令生成 ssh 秘钥

ssh-keygen -t rsa -P ''

新建一个名为 authorized_keys 的文件

将每台机器中 /root/.ssh/id_rsa.pub 文件的内容都复制到上述文件中,每台一行

然后将 authorized_keys 文件上传到每台机器的 /root/.ssh/ 目录下

成功后测试使用 ssh 进行无密码登录,例如在 hadoop1-ali 上测试登录另一台机器

ssh hadoop2-hw

输入一个 yes 之后就能看到另一台服务器的欢迎内容,至此两台机器的互相登录实现完毕

需要注意的是,上述操作都是用 root 用户进行的,这样省去权限配置等繁琐操作,但会带来潜在的安全问题,不建议在生产环境下直接使用 root 用户进行配置

安装 openJDK1.8

华为云默认已经安装了 openJDK1.8,因此只需在阿里云服务器上进行

yum install java-1.8.0-openjdk  -y
yum install java-1.8.0-openjdk-devel  -y

然后配置环境变量,编辑文件 /etc/profile 在最后加上

#Java
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64
export CALSSPATH=$JAVA_HOME/lib/*.*
export PATH=$PATH:$JAVA_HOME/bin

保存后使之生效

source /etc/profile

安装 hadoop

https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.8.5/hadoop-2.8.5.tar.gz 下载压缩包,上传到服务器的 /opt/hadoop/ 目录下

解压之

tar -xvf hadoop-2.8.5.tar.gz

/root 目录下新建几个目录

mkdir  /root/hadoop
mkdir  /root/hadoop/tmp
mkdir  /root/hadoop/var
mkdir  /root/hadoop/dfs
mkdir  /root/hadoop/dfs/name
mkdir  /root/hadoop/dfs/data

修改 etc/hadoop 中的一系列配置文件

进入目录 /opt/hadoop/hadoop-2.8.5/etc/hadoop

修改 core-site.xml<configuration> 节点内加入配置

<configuration>
   <property>

        <name>hadoop.tmp.dir</name>

        <value>/root/hadoop/tmp</value>

        <description>Abase for other temporary directories.</description>

   </property>

   <property>

        <name>fs.default.name</name>

        <value>hdfs://hadoop1-ali:9000</value>

   </property>
</configuration>

修改 hadoop-env.sh${JAVA_HOME} 修改为自己的 jdk 路径

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64

修改 hdfs-site.xml 加入配置

<property>

   <name>dfs.name.dir</name>

   <value>/root/hadoop/dfs/name</value>

   <description>Path on the local filesystem where theNameNode stores the namespace and transactions logs persistently.</description>

</property>

<property>

   <name>dfs.data.dir</name>

   <value>/root/hadoop/dfs/data</value>

   <description>Comma separated list of paths on the localfilesystem of a DataNode where it should store its blocks.</description>

</property>

<property>

   <name>dfs.replication</name>

   <value>2</value>

</property>

<property>

      <name>dfs.permissions</name>

      <value>false</value>

      <description>need not permissions</description>

</property>

新建并且修改 mapred-site.xml

复制目录中的 template 文件并重命名

cp mapred-site.xml.template mapred-site.xml

加入配置

<property>

   <name>mapred.job.tracker</name>

   <value>hadoop1-ali:49001</value>

</property>

<property>

      <name>mapred.local.dir</name>

       <value>/root/hadoop/var</value>

</property>


<property>

       <name>mapreduce.framework.name</name>

       <value>yarn</value>

</property>

修改 slaves 文件,将其中的 localhost 删除并添加自己的 datanode

hadoop2-hw

修改 yarn-site.xml 文件,加入配置

<property>

        <name>yarn.resourcemanager.hostname</name>

        <value>hadoop1-ali</value>

   </property>

   <property>

        <name>yarn.nodemanager.aux-services</name>

        <value>mapreduce_shuffle</value>

   </property>

在另一台机器上重复上述操作,文件可以直接复制,涉及六个文件,两台服务器上保持完全一致

core-site.xml, mapred-site.xml, yarn-site.xml, slaves, hadoop-env.sh,hdfs-site.xml

其中涉及到 jdk 路径需要修改为 java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.aarch64

启动 hadoop

在 namenode(hadoop1-ali) 上执行初始化

cd /opt/hadoop/hadoop-2.8.5/bin
./hadoop namenode -format

在 namenode(hadoop1-ali) 上执行启动命令

cd /opt/hadoop/hadoop-2.8.5/sbin
./start-all.sh

输入两次 yes 后即可成功

分别在阿里云和华为云后台修改安全组开放端口

在浏览器访问 http://120.26.173.104:50070/ 中即可查看效果

补充说明

文中涉及的 hostname、ip、jdk 等内容因人和设备不同而有所不同

后续经过测试,hosts 文件中的节点自身 ip 应该填内网 ip

运行 wordcount 示例

先要配置 hadoop 环境变量,此部分直接在后面的参考内容

在 hdfs 文件系统中建立 input 目录

hdfs dfs -mkdir /input

新建一个 example 文件并写入任意语句

将本地的 example 文件复制到 hdfs 文件系统的 /input 目录中

hdfs dfs -copyFromLocal example /input

hadoop-2.8.5 的目录中运行

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar wordcount /input /output

WordCount 为 mapreduce 的一个示例程序,用于统计 /input 目录中所有文件的单词个数,并将结果存储在 /output 目录中。

运行结束后,查看单词统计结果

hdfs dfs -cat /output/*

参考

流程主要参考

https://blog.csdn.net/pucao_c…

hosts 文件中的本机 ip 应该填内网 ip,否则会引发 namenode 启动失败,此问题参考自

https://blog.csdn.net/dongdon…

hadoop 环境变量配置

https://blog.csdn.net/fantasy…

原文来自 陈十一的博客

退出移动版