Hadoop完全分布式安装(centos下)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zmqgeek/article/details/78313002

Hadoop完全分布式安装

(注:本教程简单的使用两个节点作为集群环境: 一个作为 Master 主节点,另一个作为 Slave1 从节点

一、准备工作

useradd -m hadoop -s /bin/bash   # 创建新用户hadoop这条命令创建了可以登陆的 hadoop 用户,并使用 /bin/bash 作为shell。

passwd hadoop    #修改密码

su root       #切换到root用户下

chmod u+w /etc/sudoers   #添加sudoers文件的写权限

vi /etc/sudoers    #编辑sudoers文件

找到这行 root ALL=(ALL) ALL,在他下面添加xxx ALL=(ALL) ALL (这里的xxx是你的用户名)

chmod u-w /etc/sudoers      #撤销sudoers文件写权限

连接网络并切换到hadoop用户下

sudo vi /etc/sysconfig/network    #修改主机名HOSTNAME=Master从节点应为HOSTNAME=Slave1

ifconfig      #查看节点的IP地址

sudo vi /etc/hosts     #修改自己所用节点的IP映射,将主节点和从节点的IP映射全部写入,并把原来localhost的IP映射删掉

reboot -h       #重启

Slave1从节点上重复上述步骤

 

配置完成后,在Master节点和Slave1节点上都要执行:

ping Master -c 3   

ping Slave1 -c 3  # 只ping 3次,否则要按 Ctrl+c 中断ping命令用来测试主机之间网络的连通性;-c<完成次数>:设置完成要求回应的次数;

ping 通的话会显示 time,显示的结果如图5所示:

 

二、SSH无密码登陆节点

Master 节点的终端中执行

cd ~/.ssh               # 如果没有该目录,先执行一次ssh localhost

rm ./id_rsa*            # 删除之前生成的公匙(如果有)

ssh-keygen -t rsa       # 一直按回车就可以(添加rsa类型密码)

cat ./id_rsa.pub >> ./authorized_keys

chmod 600 authorized_keys      #修改权限

sudo service sshd restart         #重启sshd服务

ssh Master 验证一下(可能需要输入 yes,成功后执行 exit 返回原来的终端)

scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/    #将上公匙传输到 Slave1 节点

 

 

 Slave1 节点的终端中执行

mkdir ~/.ssh       #mkdir命令用来创建目录。该命令创建由dirname命名的目录如果不存在该文件夹需先创建,若已存在则忽略

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys     # ssh 公匙加入授权

cd ~/.ssh/             #切换到.ssh目录下

chmod 600 authorized_keys       #修改权限

rm ~/id_rsa.pub         # 用完就可以删掉了

如果有其他 Slave 节点,也要执行将 Master 公匙传输到 Slave 节点、在 Slave 节点上加入授权这两步。

Master 节点的终端中执行

ssh Slave1    #验证 Master 节点上能否无密码 SSH 到Slave1节点

三、安装Java JDK  (Master和Slave1都要安装)

(可使用Tab键进行文件名补全以节省时间,以下略)

sudo tar -zxvf ~/downloads/jdk-7u91-linux-x64.tar.gz -C /usr/local     #jdk压缩包解压到/usr/local目录下

vi ~/.bashrc    #打开.bashrc环境配置文件

在文件最后面添加如下单独行(指向 JDK 的安装位置)

export JAVA_HOME=/usr/local/jdk1.7.0_91

export PATH=$JAVA_HOME/bin:$PATH:

保存并退出

source ~/.bashrc   #使变量设置生效(source的作用是用来执行一个脚本)

echo $JAVA_HOME     # 检验变量值echo命令用于在shell中打印shell变量的值,或者直接输出指定的字符串

java -version

$JAVA_HOME/bin/java -version    #与直接执行java -version一样

如果设置正确的话,$JAVA_HOME/bin/java -version 会输出 java 的版本信息,且和 java -version 的输出结果一样,如图所示:

四、安装并配置Hadoop (在Master节点上执行)

sudo tar -zxvf ~/downloads/hadoop-2.6.1.tar.gz -C /usr/local   # 解压到/usr/local中

cd /usr/local                          #进入此目录

sudo mv hadoop-2.6.1 hadoop            # 将文件夹名改为hadoop

sudo chown -R hadoop:hadoop hadoop       # 修改文件权限

                 (用户名:用户组 文件名)

cd ./hadoop/bin/hadoop version     

#检查Hadoop是否可用,成功则会显示 Hadoop 版本信息

 

vi ~/.bashrc          #配置hadoop环境变量,添加如下内容:

export HADOOP_HOME=/usr/local/hadoop

export HADOOP_INSTALL=$HADOOP_HOME

export HADOOP_MAPRED_HOME=$HADOOP_HOME

export HADOOP_COMMON_HOME=$HADOOP_HOME

export HADOOP_HDFS_HOME=$HADOOP_HOME

export YARN_HOME=$HADOOP_HOME

export  HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

 

保存并退出

source ~/.bashrc   #使变量设置生效(source的作用是用来执行一个脚本)

 配置集群/分布式环境

修改 /usr/local/hadoop/etc/hadoop 中的5个配置文件

cd /usr/local/hadoop/etc/hadoop    #进入配置文件所在的目录

1、修改slaves文件

vi ./slaves      #修改slaves文件,将作为 DataNode 的主机名写入该文件,每行一个因此将文件中原来的localhost删除只添加一行内容:slave1

 

2、修改core-site.xml文件

vi ./core-site.xml

改为下面的配置:

<configuration>

        <property>

                <name>fs.defaultFS</name>

                <value>hdfs://Master:9000</value>

        </property>

        <property>

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

                <value>file:/usr/local/hadoop/tmp</value>

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

        </property>

</configuration>

3、修改hdfs-site.xml文件

vi ./hdfs-site.xml

其中变量名dfs.replication 的值一般设为 3,但我们只有一个 Slave 节点,所以 dfs.replication 的值还是设为 1:

<configuration>

        <property>

                <name>dfs.namenode.secondary.http-address</name>

                <value>Master:50090</value>

        </property>

        <property>

                <name>dfs.replication</name>

                <value>1</value>

        </property>

        <property>

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

                <value>file:/usr/local/hadoop/tmp/dfs/name</value>

        </property>

        <property>

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

                <value>file:/usr/local/hadoop/tmp/dfs/data</value>

        </property>

</configuration>

 

4、修改mapred-site.xml文件

vi ./mapred-site.xml

(可能需要先重命名,默认文件名为 mapred-site.xml.template),然后配置修改如下:

<configuration>

        <property>

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

                <value>yarn</value>

        </property>

        <property>

                <name>mapreduce.jobhistory.address</name>

                <value>Master:10020</value>

        </property>

        <property>

                <name>mapreduce.jobhistory.webapp.address</name>

                <value>Master:19888</value>

        </property>

</configuration>

 

5、修改yarn-site.xml文件

vi ./yarn-site.xml

<configuration>

        <property>

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

                <value>Master</value>

        </property>

        <property>

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

                <value>mapreduce_shuffle</value>

        </property>

</configuration>

cd /usr/local

sudo rm -r ./hadoop/tmp     # 删除 Hadoop 临时文件

sudo rm -r ./hadoop/logs/*   # 删除日志文件

sudo tar -zcf ~/hadoop.master.tar.gz  ./hadoop   #先压缩再复制

cd ~

sudo scp ./hadoop.master.tar.gz Slave1:/home/hadoop

Slave1 节点上执行:

sudo rm -r /usr/local/hadoop    # 删掉旧的(如果存在)

sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local  #解压

sudo chown -R hadoop /usr/local/hadoop       #修改权限

同样,如果有其他 Slave 节点,也要执行将 hadoop.master.tar.gz 传输到 Slave 节点、在 Slave 节点解压文件的操作。

首次启动需要先在 Master 节点执行 NameNode 的格式化:

(在/usr/local/hadoop/bin目录下)

cd /usr/local/hadoop/bin     #进入该目录

hdfs namenode -format       # 首次运行需要执行初始化,之后不需要

CentOS系统需要关闭防火墙

Master 节点上执行:

sudo service iptables stop   #关闭防火墙服务

sudo chkconfig iptables off #禁止防火墙开机自启,就不用手动关闭了

ssh Slave1                  #登陆Slave1节点

sudo service iptables stop   #关闭防火墙服务

sudo chkconfig iptables off #禁止防火墙开机自启,就不用手动关闭了

exit     #退出Slave1节点,重新回到Master节点

/usr/local/hadoop/bin目录下启动hadoop:

cd /usr/local/hadoop/bin

start-dfs.sh

start-yarn.sh

mr-jobhistory-daemon.sh  start  historyserver

 

通过命令 jps 可以查看各个节点所启动的进程。正确的话,在 Master 节点上可以看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 进程,在 Slave 节点可以看到 DataNode 和 NodeManager 进程如图所示:

缺少任一进程都表示出错。另外还需要在 Master 节点上通过命令 hdfs dfsadmin -report 查看 DataNode 是否正常启动,如果 Live datanodes 不为 0 ,则说明集群启动成功。

PS:

伪分布式、分布式配置切换时的注意事项

1. 从分布式切换到伪分布式时,不要忘记修改 slaves 配置文件;
2.在两者之间切换时,若遇到无法正常启动的情况,可以删除所涉及节点的临时文件夹,这样虽然之前的数据会被删掉,但能保证集群正确启动。所以如果集群以前能 启动,但后来启动不了,特别是 DataNode 无法启动,不妨试着删除所有节点(包括 Slave 节点)上的 /usr/local/hadoop/tmp 文件夹,再重新执行一次 hdfs namenode -format,再次启动试试

五、运行实例

hdfs dfs -mkdir -p /user/hadoop    #首先创建 HDFS 上的用户目录

/usr/local/hadoop/etc/hadoop 中的配置文件作为输入文件复制到分布式文件系统中:

hdfs dfs -mkdir input

hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input

 

通过查看 DataNode 的状态(占用大小有改变)http://master:50070/

输入文件确实复制到了 DataNode 中接着就可以运行 MapReduce 作业了:

hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/

hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'

    可以通过 Web 界面查看任务进度 http://master:8088/cluster,在 Web 界面点击 "Tracking UI" 这一列的 History 连接,可以看到任务的运行信息

 

执行完毕后的输出结果:

hdfs dfs -cat output/*

 

关闭 Hadoop 集群也是在 Master 节点上执行的:

stop-yarn.sh

stop-dfs.sh

mr-jobhistory-daemon.sh stop historyserver

 

 

 

猜你喜欢

转载自blog.csdn.net/zmqgeek/article/details/78313002