实验室项目需要用到HDFS
,因此需要搞个单机版的hadoop
做测试。重装系统的时候,我又作死地把虚拟机 搞坏了,快照识别不了了,因此又要装一遍,这次就记录下来吧。
首先配置一下虚拟机
1.下载hadoop及JDK8
首先,从宿主机下载hadoop
以及JDK8
,将其传到虚拟机中
yieldnull@inspiron$ scp Engineer/hadoop-2.7.2.tar.gz yieldnull@hadoop:/home/yieldnull/
yieldnull@inspiron$ scp Engineer/jdk-8u101-linux-x64.tar.gz yieldnull@hadoop:/home/yieldnull
登陆虚拟机,解压上述文件,并将其移动到/opt
目录下,更改owner
为root:root
。创建hadoop
的配置文件目录的符号链接/etc/hadoop
。
yieldnull@hadoop$ tar xvzf hadoop-2.7.2.tar.gz
yieldnull@hadoop$ tar xvzf jdk-8u101-linux-x64.tar.gz
yieldnull@hadoop$ sudo mv hadoop-2.7.2 /opt
yieldnull@hadoop$ sudo mv jdk1.8.0_101 /opt/
yieldnull@hadoop$ sudo chown root:root -R /opt/hadoop-2.7.2/
yieldnull@hadoop$ sudo chown root:root -R /opt/jdk1.8.0_101/
yieldnull@hadoop$ sudo ln -s /opt/hadoop-2.7.2/etc/hadoop /etc/hadoop
2.创建hadoop用户
创建一个新用户,用来运行hadoop
.
yieldnull@hadoop$ sudo adduser hadoop
3.配置 hadoop
3.1更改配置项
然后,删除所有windows
下需要的文件。这些东西没啥用,bash
提示文件时免去了很多烦恼。
yieldnull@hadoop$ sudo rm /opt/hadoop-2.7.2/bin/*.cmd
yieldnull@hadoop$ sudo rm /opt/hadoop-2.7.2/sbin/*.cmd
yieldnull@hadoop$ sudo rm /etc/hadoop/*.cmd
3.1.1 hadoop-env.sh
然后,配置hadoop。编辑/etc/hadoop/hadoop-env.sh
。更改下面的配置项为:
export JAVA_HOME=/opt/jdk1.8.0_101/
export HADOOP_LOG_DIR=/var/log/hadoop
3.1.2 core-site.xml
默认值见hadoop-common/core-default.xml
编辑 /etc/hadoop/core-site.xml
,如下
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/srv/hadoop</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
3.1.3 hdfs-site.xml
默认值见hadoop-hdfs/hdfs-default.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
3.2 创建需要的文件夹
上面的配置中,有些文件夹需要创建,并更改权限
yieldnull@hadoop$ sudo mkdir /srv/hadoop
yieldnull@hadoop$ sudo chown hadoop:hadoop -R /srv/hadoop
yieldnull@hadoop$ sudo mkdir /var/log/hadoop
yieldnull@hadoop$ sudo chown hadoop:hadoop -R /var/log/hadoop
3.3 更改 hosts
上述core-site.xml
配置中,master
为虚拟机的ip地址,例如192.168.56.101
。在/etc/hosts
文件中加入192.168.56.101 master
。
为什么要将Hadoop IPC
的Host
设置为虚拟机的IP
呢?
因为设成localhost
,则宿主机访问不了;
java.net.ConnectException: Call From Inspiron/127.0.1.1 to hadoop:9000 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
设成0.0.0.0
则在HDFS
中创建文件时会出现如下错误:
org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /app could only be replicated to 0 nodes instead of minReplication (=1). There are 1 datanode(s) running and 1 node(s) are excluded in this operation.
4.启动HDFS
下面的命令使用用户hadoop
执行
4.1 将hadoop的执行文件加入PATH
在~/.bashrc
中加入
export HADOOP_HOME=/opt/hadoop-2.7.2
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
然后source ~/.bashrc
4.2 格式化NameNode
hadoop@hadoop$ hdfs namenode -format
4.3 配置SSH密钥
启动hadoop
时,会使用hadoop@localhost
,hadoop@master
,hadoop@0.0.0.0
这三个用户来进行SSH
登陆。(我也不知道为什么,使用过程中就是这样)
因此,要配置SSH-Server
保证免密登陆。
hadoop@hadoop$ ssh-keygen -P '' -f ~/.ssh/hadoop
hadoop@hadoop$ cat ~/.ssh/hadoop.pub >> ~/.ssh/authorized_keys
hadoop@hadoop$ chmod 0600 ~/.ssh/authorized_keys
然后创建~/.ssh/config
,内容如下
Host master
User hadoop
IdentityFile ~/.ssh/hadoop
Host localhost
User hadoop
IdentityFile ~/.ssh/hadoop
Host 0.0.0.0
User hadoop
IdentityFile ~/.ssh/hadoop
4.4 启动HDFS
start-dfs.sh
启动过程中会有提示讲host
加入konwn_hosts
中,键入yes
即可。
在宿主机中访问http://hadoop:50070/,即可查看HDFS
状态。hadoop
为虚拟机hostname
4.5 设置开机自启
在/etc/rc.local
文件中加入
su hadoop -c "/opt/hadoop-2.7.2/sbin/start-dfs.sh >/dev/null 2>&1 &"