最近刚好赶上双11腾讯促销,于是抢购了一个8核16G内存的云服务器,加上业务上需要用到hadoop,hive,于是想搭建搭建一个hadoop分布式集群,但是限于自己手头上服务器数量不多,因此打算先搭建一个hadoop伪分布式集群。
首先介绍一下我的安装环境:
(1)java version
(2)hadopp version
接下来,开始我的环境搭建之旅,由于在上学期间已经搭建过,所以这里就不再很详细的阐述,只是记录重要的关键点。
目录
(1)创建hadoop用户
其实,完全可以用root用户来操作hadoop的,但是毕竟root的权限太高了,我们还是要令创建一个专门来管理hadoop的用户,这里就取名叫hadoop 。(以下是root模式下操作的)
useradd -m hadoop -s /bin/bash
这条命令创建了可以登录的hadoop用户,并使用/bin/bash作为shell。
接着使用如下命令设置密码,可简单的设置为hadoop,按提示输入两次密码:
sudo passwd hadoop
可为hadoop用户增加管理员权限,方便部署,避免一些对新手来说比较棘手的权限问题
adduser hadoop sudo
至此已经创建好了hadoop用户
(2)ssh免密登陆
使用su hadoop 切换到用户hadoop
su hadoop
切换到hadoop用户后,先更新一些apt,后续会使用apt安装软件,如果没更新可能有一些软件安装不了。按ctrl+alt+t打开终端窗口或者使用xshell建立远程连接,执行如下命令:
sudo apt-get update
集群,单节点模式都需要用到SSH登录(类似于远程登录,你可以登录某台Linux主机,并且在上面运行命令),Ubuntu默认已安装了SSH client,此外还需要安装SSH server:
sudo apt-get install openssh-server
安装后,可以使用命令登录本机:
ssh localhost
此时会有如下提示(SSH首次登陆提示),输入yes。然后按提示输入密码hadoop,这样就可以登录到本机。
但这样登录是需要每次输入密码的,我们需要配置成SSH无密码登录比较方便。
首先推出刚才的ssh,就回到了原先的终端窗口,然后利用ssh-keygen生成密钥,并将密钥加入到授权中:
exit 退出刚才的ssh localhost
cd ~/.ssh/ 若没有该目录,请执行一次ssh localhost
ssh-keygen -t rsa 会有提示,都按回车就可以
cat ./id_rsa.pub >> ./authorized_keys 加入授权
注释:~的含义
在Linux中,~代表的是用户的主文件夹,即”/home/用户名”这个目录,如你的用户名为hadoop,则~就代表”/home/hadoop”。此外,命令中的#后面的文字是注释,只需要输入前面命令即可。
此时再用ssh localhost命令,无需输入密码就可以直接登录了,如下图所示。
需要注意的一点:
以上只是给hadoop用户配置了免密登陆,但是root用户没有,如果后续想通过root用户来管理hadoop,这里建议在root用户模式下,重复上述ssh免密的过程,具体如下:
1、从hadoop模式进入到root模式
sudo su
2、配置免密ssh
cd ~/.ssh/ 若没有该目录,请执行一次ssh localhost
ssh-keygen -t rsa 会有提示,都按回车就可以
cat ./id_rsa.pub >> ./authorized_keys 加入授权
3、ssh localhost看需不需要密码来验证
(2)安装java环境
这里就不再赘述。注意jdk版本保持在1.8以上。
(3)安装hadoop3.0.3
下载完hadoop文件后一般可以直接使用。我们选择将Hadoop安装至/usr/local/中:
sudo tar -zxf ~/Downloads/hadoop-2.7.3.tar.gz -C /usr/local #解压到/usr/local中
cd /usr/local/
sudo mv ./hadoop-2.7.3/ ./hadoop #将文件夹名改为hadoop
sudo chown -R hadoop ./hadoop #修改文件权限 这一步一定要做,因为权限很重要
Hadoop解压后即可使用。输入如下命令来检查Hadoop是否可用,成功则会显示Hadoop版本信息:
cd /usr/local/hadoop
./bin/hadoop version
这样操作还是不方便,我们可以hadoop命令配置成全局的.
vim /etc/profile
添加以下hadoop配置信息
#hadoop
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/sbin
export PATH=$PATH:$HADOOP_HOME/bin
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$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_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
是配置的命令生效:
source /etc/profile
如下图所示:
(4)搭建hadoop伪分布式集群
Hadoop可以在单节点上以伪分布式的方式运行,Hadoop进程以分离的java进程来运行,节点既作为NameNode也作为DataNode,同时,读取的是HDFS中的文件。
需要对以下文件进行修改:
1、hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/hadoop/data/dfs/name</value>
<final>true</final>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/hadoop/data/dfs/data</value>
</description>
<final>true</final>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.http.address</name>
<value>0.0.0.0:9870</value>
</property>
<property>
<name>fs.checkpoint.dir</name>
<value>/usr/local/hadoop/data/dfs/testdir</value>
</property>
<property>
<name>fs.checkpoint.edits.dir</name>
<value>/usr/local/hadoop/data/dfs/testdir</value>
</property>
<property>
<name>ipc.maximum.data.length</name>
<value>134217728</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
2、core-site.xml文件(注意创建data文件夹以及里面的文件夹,具体见下面配置路径)
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9820</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/data/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
</configuration>
3、hadoop-env.sh,添加以下两行代码
export JAVA_HOME=/usr/jvm/java
export HADOOP_HOME=/usr/local/hadoop
4、以下四个文件配置如下信息(主要是给root用户操作)
(5)验证是否安装成功
1、执行NameNode的格式化
hdfs namenode -format
成功的话,会看到”successfully formatted”和”Exitting with status 0”的提示,若为”Exitting with status 1”则是处错。
2、开启所有的进程
sbin/start-dfs.sh
3、jps查看当前进程是否都启动了(主要是如下截图的6种)
4、web页面查看是否启动,浏览器输入IP+端口,出现如下截图表示成功。
至此hadoop3x的伪分布式环境搭建完毕,hive的环境搭建在我的博文其他篇章,欢迎阅读.
参考文章;