hadoop部署

创建hadoop用户

useradd -m hadoop -s /bin/bash # 创建新用户hadoop
passwd hadoop

  

 

可为 hadoop 用户增加管理员权限,方便部署,避免一些对新手来说比较棘手的权限问题,执行:

$ visudo
root ALL=(ALL) ALL 
hadoop ALL=(ALL) ALL #为hadoop用户增加sudo权限

 

su hadoop   #  切换到hadoop用户

 

 

[root@localhost bin]# which java
/usr/bin/java
[root@localhost bin]# ls /usr/bin/java -l
lrwxrwxrwx 1 root root 22 Mar 25 17:49 /usr/bin/java -> /etc/alternatives/java
[root@localhost bin]# ls -l /etc/alternatives/java
lrwxrwxrwx 1 root root 29 Mar 25 17:49 /etc/alternatives/java -> /usr/java/jdk-12.0.1/bin/java

  

export JAVA_HOME=/usr/

source /etc/profile

 

配置无密码登录

 

我们选择将 Hadoop 安装至 /usr/local/ 中:

sudo tar -zxf hadoop-2.6.0.tar.gz -C /usr/local     # 解压到/usr/local中
cd /usr/local/
sudo mv ./hadoop-2.6.0/ ./hadoop 
sudo chown -R hadoop:hadoop ./hadoop      # 修改文件权限

 

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

cd /usr/local/hadoop
./bin/hadoop version

  

Hadoop单机配置(非分布式)

Hadoop 默认模式为非分布式模式,无需进行其他配置即可运行。非分布式即单 Java 进程,方便进行调试。

现在我们可以执行例子来感受下 Hadoop 的运行。Hadoop 附带了丰富的例子(运行./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar可以看到所有例子),包括 wordcount、terasort、join、grep 等。

在此我们选择运行 grep 例子,我们将 input 文件夹中的所有文件作为输入,筛选当中符合正则表达式 dfs[a-z.]+ 的单词并统计出现的次数,最后输出结果到 output 文件夹中。

cd /usr/local/hadoop
mkdir ./input
cp ./etc/hadoop/*.xml ./input  # 将配置文件作为输入文件
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'
[root@localhost hadoop]# cat output/*   # 查看运行结果
1	dfsadmin

运行Hadoop实例时可能会报错运行Hadoop实例时可能会报错

若出现提示 “WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable”,该 WARN 提示可以忽略,不会影响 Hadoop 正常运行(可通过编译 Hadoop 源码解决,解决方法请自行搜索)。

若出现提示 “INFO metrics.MetricsUtil: Unable to obtain hostName java.net.UnknowHostException”,这需要执行如下命令修改 hosts 文件,为你的主机名增加IP映射:vim /etc/hosts

注意,Hadoop 默认不会覆盖结果文件,因此再次运行上面实例会提示出错,需要先将 ./output删除。rm -r ./output

 

vim ~/.bashrc

# Hadoop Environment Variables
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

  

  1. 这些变量在启动 Hadoop 进程时需要用到,不设置的话可能会报错(这些变量也可以通过修改 ./etc/hadoop/hadoop-env.sh 实现)。
  2. Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中
  3. 伪分布式需要修改2个配置文件core-site.xml 和 hdfs-site.xml 。
  4. Hadoop的配置文件是 xml 格式,
  5. 每个配置以声明 property 的 name 和 value 的方式来实现。

修改 core-site.xml

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration> 

  

  • 修改配置文件 hdfs-site.xml
<configuration>
    <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>

  

  • 执行 NameNode 的格式化:
./bin/hdfs namenode -format

成功的话,会看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若为 “Exitting with status 1” 则是出错。

 

  • 开启 NaneNode 和 DataNode 守护进程:
./sbin/start-dfs.sh

若出现如下 SSH 的提示 “Are you sure you want to continue connecting”,输入 yes 即可。

首次启动hadoop时可能会提示:“WARN util.NativeCodeLoader…” 如前面提到的,这个提示不会影响正常使用。

 

  • 判断是否启动成功

启动完成后,可以通过命令 jps 来判断是否成功启动,若成功启动则会列出如下进程: “NameNode”、”DataNode”和SecondaryNameNode(如果 SecondaryNameNode 没有启动,请运行 sbin/stop-dfs.sh 关闭进程,然后再次尝试启动尝试)。如果没有 NameNode 或 DataNode ,那就是配置不成功,请仔细检查之前步骤,或通过查看启动日志排查原因。

 

#################

vi /etc/ssh/sshd_config

 

修改之后为:

PermitRootLogin yes

UsePAM no

PasswordAuthentication yes

 

RSAAuthentication yes

PubkeyAuthentication yes

 

 

(3)修改文件夹以及文件的权限。

#chmod 700 /home/Hadoop/.ssh

#chmod 644 /home/Hadoop/.ssh/authorized_keys

 

@@@@@@

5.1 第一次执行start-dfs.sh启动hadoop时报错:

[root@localhost hadoop]# start-dfs.sh 
Starting namenodes on [localhost]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [localhost]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.
[root@localhost hadoop]#

原因:启动时用的是root用户,不是hadoop的默认用户(hadoop默认用户为hadoop)

将start-dfs.sh,stop-dfs.sh两个文件顶部添加以下参数
#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
》还有,start-yarn.sh,stop-yarn.sh顶部也需添加以下:
#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

@@@@@@@@

5.2 解决完上述用户问题后,执行start-dfs.sh报permission denied错误:

[root@localhost hadoop]# start-dfs.sh 
WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER. Using value of HADOOP_SECURE_DN_USER.
Starting namenodes on [localhost]
Last login: Mon Jul 23 22:32:50 CST 2018 on pts/0
localhost: Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
localhost: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
Starting datanodes
Last login: Mon Jul 23 23:01:39 CST 2018 on pts/0
localhost: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
Starting secondary namenodes [localhost]
Last login: Mon Jul 23 23:01:39 CST 2018 on pts/0
localhost: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
[root@localhost hadoop]# 

原因:启动前未配置登录秘钥信息。

解决方法(注意把$hostname替换成实际hostname):

#cd ~/.ssh
#ssh-keygen -t rsa
#ssh-copy-id $hostname

 

@@@@@@@@@@@

第四步:ssh 免密登陆
为防止权限问题从这一步开始使用普通用户进行操作,cd 一下进入用户目录输入命令’cd .ssh/‘进入.ssh目录下,输入命令’ssh-keygen -f rsa’(生成公私钥)在.ssh目录下会出现两个文件,将后缀为.pub的文件复制到authorized_keys中,然后重启(在特权用户模式下输入命令’reboot’)。

第五步:配置jdk和hadoop路径
’vim ~/.bashrc’:

source ~/.bashrc

第六步:配置文件
本步骤一共需要配置6个文件

第一个:hadoop-env.sh
export JAVA_HOME=${JAVA_HOME}

第二个:yarn-env.sh
#export JAVA_HOME=/home/…

第三个:hdfs-site.xml
如下图:

里面的地址根据自己的情况进行修改。

第四个:yarn-site.xml
如下图:


第五个:core-site.xml
如下图:

此处tmp目录地址根据自己创建的情况进行修改。

第六个:mapred-site.xml
原文件夹中没有mapred-site.xml文件,但有一个文件叫做mapred-site.xml.t…(可以使用tab键进行补全),将这个文件重命名为我们需要的文件名。修改内容如下图:

第七步:格式化与启动

进入hadoop安装目录下的bin目录输入命’hadoop namenode -format’进行格式化,如果没有错误,则进入hadoop 安装目录下的sbin目录,先启动"start-dfs.sh"脚本,再启动"start-all.sh"脚本。

 

Permission denied (publickey,gssapi-keyex,gssapi-with-mic) 解决方法

sudo vim /etc/ssh/sshd_config 增加如下修改 PasswordAuthentication yes

###########################

 

  • 通过查看启动日志分析启动失败原因

有时 Hadoop 无法正确启动,如 NameNode 进程没有顺利启动,这时可以查看启动日志来排查原因,注意几点:

  1. 启动时会提示形如 “dblab: starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-dblab.out”,   其中 dblab 对应你的主机名,但启动的日志信息是记录在 /usr/local/hadoop/logs/hadoop-hadoop-namenode-dblab.log 中,所以应该查看这个后缀为 .log 的文件;
  2. 每一次的启动日志都是追加在日志文件之后,所以得拉到最后面看,看下记录的时间就知道了。
  3. 一般出错的提示在最后面,也就是写着 Fatal、Error 或者 Java Exception 的地方。
  4. 可以在网上搜索一下出错信息,看能否找到一些相关的解决方法。

 

成功启动后,可以访问 Web 界面 http://localhost:50070 查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件。

 

 

 

posted @ 2019-04-24 00:31  linuxws  阅读(546)  评论(0编辑  收藏  举报