Hadoop:Hadoop单机伪分布式的安装和配置
1、安装后设置ssh
可以使用如下命令登陆本机:ssh localhost
此时会有SSH首次登陆提示,输入 no,(如果输入yes再输入密码,这样就登陆到本机了,但这样登陆是需要每次输入密码的,我们需要配置成SSH无密码登陆比较方便,如果进去了首先退出刚才的 ssh)。
回到我们原先的终端窗口,然后利用 ssh-keygen 生成密钥,并将密钥加入到授权中:
exit # 退出刚才的 ssh localhost,或者用ctrl+d
cd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa # 会有提示,都按回车就可以,如果已经存在,直接进入下一步就可以了(lz的就存在,说明以前已经用过这个)
cat ./id_rsa.pub >> ./authorized_keys # 加入授权,把id_rsa.pub 追加到授权的 key 里面去
关于设置hadoop用户 (前面说了,其实完全可以不用)
2、设置环境变量
注:jdk包需要自行安装
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export JAVA_HOME=/usr/jdk1.8.0_161
export PATH
export HADOOP_HOME=/opt/hadoop/hadoop-2.9.0
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
PATH="$PATH:${JAVA_HOME}/bin:${SPARK_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin"
export PATH
export CLASSPATH=$CLASSPATH:${JAVA_HOME}/lib:/opt/hadoop/hadoop-2.9.0/etc/hadoop:/opt/hadoop/hadoop-2.9.0/share/hadoop/common/lib/*:/opt/hadoop/hadoop-2.9.0/share/hadoop/common/*:/opt/hadoop/hadoop-2.9.0/share/hadoop/hdfs:/opt/hadoop/hadoop-2.9.0/share/hadoop/hdfs/lib/*:/opt/hadoop/hadoop-2.9.0/share/hadoop/hdfs/*:/opt/hadoop/hadoop-2.9.0/share/hadoop/yarn/lib/*:/opt/hadoop/hadoop-2.9.0/share/hadoop/yarn/*:/opt/hadoop/hadoop-2.9.0/share/hadoop/mapreduce/lib/*:/opt/hadoop/hadoop-2.9.0/share/hadoop/mapreduce/*:/opt/hadoop/hadoop-2.9.0/contrib/capacity-scheduler/*.jar
3、修改配置文件
编辑core-site.xml 文件
[hadoop@localhost hadoop]$ vi core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file: /opt/hadoop/hadoop-2.9.0/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 文件
[hadoop@localhost hadoop]$ vi hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file: /opt/hadoop/hadoop-2.9.0/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file: /opt/hadoop/hadoop-2.9.0/tmp/dfs/data</value>
</property>
</configuration>
Hadoop 的运行方式是由配置文件决定的(运行 Hadoop 时会读取配置文件),
因此如果需要从伪分布式模式切换回非分布式模式,需要删除 core-site.xml 中的配置项。
此外,伪分布式虽然只需要配置 fs.defaultFS 和 dfs.replication 就可以运行,
不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoo-hadoop,
而这个目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。
同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。
修改配置文件:libexec/hadoop-config.sh
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.51-2.4.5.5.el7.x86_64/jre
# Attempt to set JAVA_HOME if it is not set
if [[ -z $JAVA_HOME ]]; then
# On OSX use java_home (or /Library for older versions)
if [ "Darwin" == "$(uname -s)" ]; then
if [ -x /usr/libexec/java_home ]; then
export JAVA_HOME=($(/usr/libexec/java_home))
else
export JAVA_HOME=(/Library/Java/Home)
fi
fi
# Bail if we did not detect it
if [[ -z $JAVA_HOME ]]; then
echo "Error: JAVA_HOME is not set and could not be found." 1>&2
exit 1
fi
fi
4、配置完成后,执行 NameNode 的格式化
bin/hdfs namenode -format
开启 NameNode 和 DataNode 守护进程
5、启动hadoop
bin/start-dfs.sh
6、验证是否启动hadoop 成功
通过jps查看启动的Hadoop进程
启动完成后,可以通过命令 jps 来判断是否成功启动,若成功启动则会列出如下进程:
“NameNode”、”DataNode” 和 “SecondaryNameNode”(如果 SecondaryNameNode 没有启动,
请运行 sbin/stop-dfs.sh 关闭进程,然后再次尝试启动尝试)。
如果没有 NameNode 或 DataNode ,那就是配置不成功,请仔细检查之前步骤,或通过查看启动日志排查原因。
pika:~$jps
7、拷贝文件
#启动hadoop并将input文件copy到hdfs中
pika:~$hdfs dfs -ls /
pika:~$hdfs dfs -mkdir -p /input
pika:~$hdfs dfs -ls /
将输入文件copy到hadoop hdfs文件系统中供其使用(.java文件是可以不用copy进去的)
$hdfs dfs -ls /input