基于Hadoop分布式集群的搭建

对于Hadoop集群的搭建,一直处于摸索状态,但这个在数据挖掘中确实相当的重要,所以总结如下:

ssh免密登录

  1. 安装ssh客户端
$ sudo apt-get install openssh-client

安装完客户端后,它携带了一些其他的SSH工具,比如ssh-keygen用于生成公钥/私钥对,scp用于通过SSH远程复制文件,sftp用于实现安全FTP传输。安装完成后,马上可以在服务器上进行测试。

ssh localhost

hadoop集群mysql命令 hadoop集群ssh_Hadoop


此时一般会没有什么反应会显示出ssh: Could not resolve hostname locasthost: Name or service not known

接着输入

ssh-keygen -t rsa

会出现

hadoop集群mysql命令 hadoop集群ssh_hadoop_02


此时输入

ssh-copy-id -i ~/.ssh/id_rsa.pub node2@192.168.61.128
也有人输入 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys(不建议)

说明一下:我的主机是node1(192.168.61.128),需要免密登录的是node2(192.168.61.129)和node3(192.168.61.130)
接着就是 输入

gedit /etc/ssh/ssh_config

输入

#RSAAuthentication yes
#PubkeyAuthentication yes

最后一步就是(ssh服务器下载)

sudo apt-get install openssh-server
ssh localhost

到此就完成了如图

hadoop集群mysql命令 hadoop集群ssh_hdfs_03

测试部分(这部分也重要)需要输入:ssh 主机名@IP地址

ssh node2@192.168.61.129

如果正确会看到:

hadoop集群mysql命令 hadoop集群ssh_hadoop_04


** hadoop安装**

2.基于Hadoop的安装过程

(1)Hadoop的下载
由于我用的是校园网下载,对于Hadoop的下载可能会比较慢,但此处还是要分享一些下载的网站(会很慢)

https://archive.apache.org/dist/hadoop/common/hadoop-3.0.0-alpha4/

分享一个百度云链接(绝对安全)

链接:https://pan.baidu.com/s/1JfhOISRnS88XPCT6pAHrzQ 
提取码:qxrk

下载完成后进行安装
复制到/usr/local/hadoop/目录下
然后输入

tar -zxvf hadoop-3.0.1.tar.gz

解压,解压后的目录为/usr/local/hadoop/hadoop-3.0.1/(非常重要,必须确定安装的位置,在后期的教科书上没有说明位置只有操作是很难弄明白按照步骤操作还会报错)此时输入cd /usr/local/hadoop/hadoop-3.0.1 进入Hadoop-3.0.1文件夹下,在输入

./bin/hadoop -version

正常会看到Hadoop的版本信息(没有也没事)
(2)在相应的目录下建立新的目录(特别说明一定要看好位置,不然后期报错没法找原因)
我们的文件夹建立在/usr/local/hadoop/目录下(注:特别提醒,在查看了许多书和网上经验后始终认为没有人强调这个问题,但对于刚接触这个东西的人而言,却是非常重要的)
在/usr/local/hadoop/目录下,建立tmp、hdfs/name、hdfs/data目录,执行如下命令(并非/usr/local/hadoop/hadoop-3.0.1)

mkdir /usr/local/hadoop/tmp 
mkdir /usr/local/hadoop/hdfs 
mkdir /usr/local/hadoop/hdfs/data 
mkdir /usr/local/hadoop/hdfs/name

与此同时需要配置环境变量(包括jdk的环境变量)

gedit /etc/profile/
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export PATH=/usr/local/java/jdk1.8.0_191/bin:$PATH
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export HADOOP_HOME=/usr/local/hadoop/hadoop-3.0.1
export PATH=$PATH:$HADOOP_HOME/bin

添加如下指令行(可能会多余但笔者从巨坑里爬出来的,所以已成惊弓之鸟就添加了)

# set hadoop path
export HADOOP_HOME=/usr/local/hadoop/hadoop-3.0.1
export PATH=$PATH:$HADOOP_HOME/bin

配置完成后使其生效输入

source /etc/profile/

如果重系统后又要输入source /etc/profile/才能运行java和Hadoop,那么可以用如下办法进行处理
在终端输入

gedit /etc/bash.bashrc/

进入后在顶端重新输入

export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export PATH=/usr/local/java/jdk1.8.0_191/bin:$PATH
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export HADOOP_HOME=/usr/local/hadoop/hadoop-3.0.1
export PATH=$PATH:$HADOOP_HOME/bin

退出后再输入source /etc/profile即可。
(3)Hadoop文件的配置
1.配置hadoop-env.sh

gedit  /usr/local/hadoop/hadoop-3.0.1/etc/hadoop/hadoop-env.sh

进入后找到

hadoop集群mysql命令 hadoop集群ssh_hadoop_05

后在其下面添加(#不能丢)

# The java implementation to use.
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/usr/local/java/jdk1.8.0_191

Ctrl+s后退出
2.配置yarn-env.sh

在终端输入

gedit  /usr/local/hadoop/hadoop-3.0.1/etc/hadoop/yarn-env.sh

进入文档后看到

hadoop集群mysql命令 hadoop集群ssh_hadoop集群mysql命令_06


输入(#不能丢):

#export YARN_PROXYSERVER_OPTS=
#The java implementation to usr
export JAVA_HOME=/usr/local/java/jdk1.8.0_191

Ctrl+s后退出。
3.配置core-site.xml
在终端输入

gedit  /usr/local/hadoop/hadoop-3.0.1/etc/hadoop/core-site.xml

进入文件后看到

hadoop集群mysql命令 hadoop集群ssh_hadoop集群mysql命令_07


输入

<configuration>
 <property>
    <name>fs.default.name</name>
    <value>hdfs://127.0.0.1:9000</value>
    <description>HDFS的URI,文件系统://namenode标识:端口号</description>
  </property>

  <property>
     <name>hadoop.tmp.dir</name>
     <value>/usr/local/hadoop/tmp</value>
     <description>namenode上本地的hadoop临时文件夹</description>
  </property> 
</configuration>

说明如下:
127.0.0.1可以换成localhost(正常配置为localhost)
Ctrl+s后退出
4.配置hdfs-site.xml
在终端输入

gedit  /usr/local/hadoop/hadoop-3.0.1/etc/hadoop/hdfs-site.xml

进入文件后会看到

hadoop集群mysql命令 hadoop集群ssh_Hadoop_08


输入:

<configuration>
  <property>
     <name>dfs.name.dir</name>
     <value>/usr/local/hadoop/hdfs/name</value>
     <description>namenode上存储hdfs名字空间元数据 </description>
   </property>
   <property>
      <name>dfs.data.dir</name>
      <value>/usr/local/hadoop/hdfs/data</value>
      <description>datanode上数据块的物理存储位置</description>
   </property>
   <property>
      <name>dfs.replication</name>
      <value>1</value>
      <description>副本个数,配置默认是3,应小于datanode机器数量</description>
   </property>
</configuration>

ctrl+s后退出
5.mapred-sit.xml配置
在终端输入

gedit  /usr/local/hadoop/hadoop-3.0.1/etc/hadoop/mapred-site.xml

会看到

hadoop集群mysql命令 hadoop集群ssh_hadoop_09


输入

<configuration>
<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
</property>
</configuration>

ctrl+s后退出
6.配置yarn-site.sml
在终端输入

gedit  /usr/local/hadoop/hadoop-3.0.1/etc/hadoop/yarn-site.xml

会看到

hadoop集群mysql命令 hadoop集群ssh_hadoop集群mysql命令_10


输入

<configuration>

<!-- Site specific YARN configuration properties -->
  <property>
     <name>yarn.nodemanager.aux-services</name> 
     <value>mapreduce_shuffle</value>
   </property>

   <property> 
      <name>yarn.resourcemanager.webapp.address</name>
      <value>127.0.0.1:8099</value>
      <description>这个地址是mr管理界面的</description>
    </property>
</configuration>

说明:127.0.0.1为主机的IP,可以更改但不能随意为自己定的分布式集群的IP,8009为端口号一定要记住且不能为9000,别的自己设定,一旦设定就不能忘记,后面会有用的。
到此所有的文件均已配置完毕。

3.启动及测试

(1)格式化namenode
输入

cd /usr/local/hadoop/hadoop-3.0.1/bin
./hdfs namenode-format

如果成功会出现“successfully formatted” 和 “Exitting with status 0”但我的没有出现,一般不影响

(2)启动NameNode 和 DataNode 守护进程及secondary namenodes

cd /usr/local/hadoop/hadoop-3.0.1
./sbin/start-dfs.sh

如果运行脚本报如下错误,

ERROR: Attempting to launch hdfs namenode as root
 ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting launch.
 Starting datanodes
 ERROR: Attempting to launch hdfs datanode as root
 ERROR: but there is no HDFS_DATANODE_USER defined. Aborting launch.
 Starting secondary namenodes [localhost.localdomain]
 ERROR: Attempting to launch hdfs secondarynamenode as root
 ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting launch.


解决办法是:

gedit  /usr/local/hadoop/hadoop-3.0.1/sbin/start-dfs.sh

第二行加入

HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

即可
再输入

gedit  /usr/local/hadoop/hadoop-3.0.1/sbin/stop-dfs.sh

输入

HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

即可
(3)启动ResourceManager 和 NodeManager 守护进程

cd  /usr/local/hadoop/hadoop-3.0.1
./sbin/start-yarn.sh

如果启动时报如下错误,

Starting resourcemanager
 ERROR: Attempting to launch yarn resourcemanager as root
 ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting launch.

解决方案(也是由于缺少用户定义)
输入

/usr/local/hadoop/hadoop-3.0.1/sbin/start-yarn.sh

在第二行输入

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

再输入

/usr/local/hadoop/hadoop-3.0.1/sbin/start-yarn.sh

在第二行输入

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

(4)启动Hadoop
到此基本完成
输入

cd /usr/local/hadoop/hadoop-3.0.1/sbin/
./start-all.sh

会看到

hadoop集群mysql命令 hadoop集群ssh_Hadoop_11


到此基本完成

再输入jps会看到

hadoop集群mysql命令 hadoop集群ssh_hadoop_12


还差最后一步,在web界面验证

输入

http://127.0.0.1:8099

说明此处的127.0.0.1:8099为在hdfs中配置的IP和端口号

如果成功会看到

hadoop集群mysql命令 hadoop集群ssh_Hadoop_13


到此全部完成。

注:在此特别引用来自的博客,可以参考一下