hadoop pseudo distributed mode
系统环境
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.10
Release: 18.10
Codename: cosmic
先决条件
- jdk-8。jdk-12试过后不可以,缺一些包。
- ssh
- pdsh
sudo apt install ssh
sudo apt install pdsh
jdk 可以去oracle官网下载安装,地址:https://www.oracle.com/technetwork/es/java/javasebusiness/downloads/index.html
Ubuntu有些ppa提供安装jdk。
Hadoop下载地址:
https://hadoop.apache.org/releases.html
下载完成后,将Hadoop解压到/srv和/opt目录中是一个不错的选择。但是/op通常为源码安装程序,非apt install程序。而/srv目录代表服务。Hadoop、HBase、Hive等作为服务在机器上运行,因此应该将Hadoop解压到/srv。
tar -xzf hadoop-3.1.2.tar.gz
sudo mv hadoop-3.1.2 /srv/
sudo chmod 777 -R /srv/ hadoop-3.1.2/
sudo ln -s /srv/ hadoop-3.1.2 /srv/hadoop
设置环境
vim ~/.bashrc
将如下内容添加到该文件的最下面:
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export CLASSPATH=.:$JAVA_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH
export HADOOP_HOME=/srv/hadoop
export CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath):$CLASSPATH
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
添加完后在终端输入命令:
source ~/.bashrc
检查环境配置是否成功:
hadoop version
显示:
Hadoop 3.1.2
Source code repository https://github.com/apache/hadoop.git -r 1019dde65bcf12e05ef48ac71e84550d589e5d9a
Compiled by sunilg on 2019-01-29T01:39Z
Compiled with protoc 2.5.0
From source with checksum 64b8bdd4ca6e77cce75a93eb09ab2a9
This command was run using /srv/hadoop/share/hadoop/common/hadoop-common-3.1.2.jar
表示成功
Hadoop配置
设置伪分布模式的Hadoop的最重要的步骤就是配置Hadoop环境
进入Hadoop目录:
cd $HADOOP_HOME
编辑hadoop-env.sh文件:
vim etc/hadoop/hadoop-env.sh
找到并配置:
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
接下去依次配置以下文件。
etc/hadoop/core-site.xml:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/app/hadoop/data</value>
</property>
</configuration>
etc/hadoop/hdfs-site.xml:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
etc/hadoop/mapred-site.xml:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
etc/hadoop/yarn-site.xml:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
设置SSH
接下来我们测试一下我们能否利用ssh不需要输入密码就能连接到localhost。
ssh localhost
如果需要输入密码,则需要进行以下配置:
ssh-keygen -t rsa -P ‘’ -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
如果不设置免密连接localhost,在下面启动Hadoop时会出现权限问题,因此在这里需要设置免密连接localhost。
格式化Namenode
在etc/hadoop/core-site.xml配置文件中,我们设置了Namenode将他的文件保存在/var/app/hadoop/data目录中。因此我们需要初始化这个目录,然后才能格式化Namenode:
sudo mkdir -p /var/app/hadoop/data
sudo chmod -R 777 /var/app/hadoop/
hdfs namenode -format
在运行完以后,输入以下命令:
ls /var/app/hadoop/data/
如果看到有一个dfs目录,则表示Hadoop设置完成。
启动Hadoop
在完成了上述的所有配置后,现在就可以启动Hadoop守护程序了。
输入以下命令:
此处可能会出现如下错误:
localhost: rcmd: socket: Permission denied
如果出现此错误,请输入一下命令:
sudo touch /etc/pdsh/rcmd_default
sudo vim /etc/pdsh/rcmd_default
在打开的文件中输入ssh,然后保存。然后重新启动Hadoop。
启动完成后可以使用jps命令查看正在运行的进程。
jps
如果看到以下类似的结果,则表明启动成功。
13970 NodeManager
13206 DataNode
14315 Jps
13739 ResourceManager
13004 NameNode
13486 SecondaryNameNode
除了jps以外,其他的都是Hadoop的进程,如果有进程没有运行,则说明在操作中出现了错误。你可以在Hadoop目录下的log目录中找到相关日志,检查并解决错误。
如果需要关闭,请输入命令:
http://localhost:9870/dfshealth.html#tab-overview
Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
解决方案是在文件hadoop-env.sh中增加:
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"