Hadoop安装(一主一从)
操作环境介绍:
操作系统环境:centos7.6 腾讯云服务器主机(两台都是)
操作平台:宝塔界面
Hadoop版本:3.2.3
JDK版本:1.8.0_291
关闭宝塔防火墙,腾讯云控制台修改安全组,配置自己需要的ip,否则可能会有注入病毒的风险
教程正式开始
主机名配置
查看主从服务器各自的主机名
hostname
建议将主服务器修改为master
从服务器主机名修改为slave (多服务器的话后面可以加上数字区分)
sudo hostnamectl set-hostname [yourname]
具体主机名因人而异,不做强制要求
host文件配置
配置主服务器host文件:
vim /etc/hosts
host文件修改为:
127.0.0.1 localhost.localdomain localhost
127.0.0.1 localhost4.localdomain4 localhost4
::1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
然后在底部新增:
由于腾讯云服务器缘故,映射本机需要映射内网ip,在控制台获取或者使用ifconfig
获取
master主机内网ip master主机名
从节点公网ip slave主机名
从节点同步配置,但是需要将master主机ip改为公网ip,slave主机ip改为内网ip
示例:
master:
slave:
ssh免密登录配置
需要开启宝塔ssh,服务器的安全组配置开放
在master主机上运行:
ssh-keygen -t rsa
一路回车,生成rsa加密秘钥
运行命令将公钥以追加的形式加入到authorized_keys
文件中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
将authorized_keys
文件分发到从节点服务器中,演示用户为root
scp authorized_keys [节点主机名]:/root/.ssh/
使用ssh命令尝试登录从节点验证是否成功
ssh [主机名]
第一次连接需要输入yes,如果没有要求输入密码,则配置成功
同样的方法,将从节点slave的ssh秘钥也分发到master中
JDK配置
下载、解压
配置环境变量:
vim ~/.bash_profile
添加环境变量:
JAVA_HOME=jdk存放的目录
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH
按ESC键输入:wq
退出vim编辑器
执行使环境变量生效
source ~/.bash_profile
使用java -version和javac -version 验证jdk安装是否成功
Hadoop配置
官网下载Hadoop
新增环境变量Hadoop,新增方法同jdk:
export HADOOP_HOME=hadoop存放目录
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
文件 | 作用 |
---|---|
workers | 记录所有的数据节点的主机名或 IP 地址 |
core-site.xml | Hadoop 核心配置 |
hdfs-site.xml | HDFS 配置项 |
mapred-site.xml | MapReduce 配置项 |
yarn-site.xml | YRAN 配置项 |
修改配置文件:${HADOOP_HOME}/etc/hadoop
Core-site.xml
每个路径都需要手动修改为你想放置的位置
<property>
<name>hadoop.tmp.dir</name>
<value>file:/newData/klns/hadoop/hdfs/tmp</value>
<description>临时存储目录,修改为自己想放的地方</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master主机名:9000</value>
<description>hdfs默认地址与端口</description>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131702</value>
</property>
hdfs-site.xml
每个路径都需要手动修改为你想放置的位置
<property><!--namenode持久存储名字空间及事务日志的本地文件系统路径-->
<name>dfs.namenode.name.dir</name>
<value>file:/newData/klns/hadoop/hdfs/name</value>
<description>namenode上存储hdfs名字空间元数据 </description>
</property>
<property><!--DataNode存放块数据的本地文件系统路径-->
<name>dfs.datanode.data.dir</name>
<value>file:/newData/klns/hadoop/hdfs/data</value>
<description>datanode上数据块的物理存储位置</description>
</property>
<property><!--数据需要备份的数量,不能大于集群的机器数量,默认为3-->
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>[cronos-slave]:50090</value>
<description>这个主机名设置哪个节点,SecondaryNameNode就启动在哪个服务器上</description>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.client.use.datanode.hostname</name>
<value>true</value>
<description>only cofig in clients</description>
</property>
Mapred-site.xml
每个路径都需要手动修改为你想放置的位置
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/newData/klns/hadoop/hadoop</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/newData/klns/hadoop/hadoop</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/newData/klns/hadoop/hadoop</value>
</property>
Yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>cronos-master</value>
<description>The hostname of the RM.修改为主节点主机名</description>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
hadoop-env.sh、mapred-env.sh、yarn-env.sh文件中各添加javahome
export JAVA_HOME=/newData/klns/jdk/jdk1.8.0_291
workers文件中填写主机名,主从都写
进入目录${HADOOP_HOME}/sbin
修改start-dfs.sh、stop-dfs.sh
在文件头部加上:
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
修改start-yarn.sh、stop-yarn.sh
在文件头部加上:
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
保存
执行hadoop version查看版本信息
在master主机上执行start-dfs.sh
启动hdfs服务,执行jps查看已启动的服务
此时的slave主机执行jps之后显示:
浏览器访问:
http://主节点ip:9870/
可以访问到hdfs面板与详细信息
格式化HDFS:
hdfs namenode -format
这一步不能省略,也只能执行一次,不然后面会报错
HDFS基础shell:
# 显示根目录 / 下的文件和子目录,绝对路径
hadoop fs -ls /
# 新建文件夹,绝对路径
hadoop fs -mkdir /hello
# 上传文件
hadoop fs -put hello.txt /hello/
# 下载文件
hadoop fs -get /hello/hello.txt
# 输出文件内容
hadoop fs -cat /hello/hello.txt
主机上执行start-yarn.sh
启动yarn与MapReduce服务
主节点:
从节点:
现在我们准备一份文本文件 input.txt:
I love cronos
I like cronos
I love hadoop
I like hadoop
将以上内容用文本编辑器保存。
创建目录:
hadoop fs -mkdir /wordcount
hadoop fs -mkdir /wordcount/input
执行 MapReduce:
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount /wordcount/input /wordcount/output
查看执行结果:
hadoop fs -cat /wordcount/output/part-r-00000
如果正常,将会显示:
I 4
hadoop 2
like 2
love 2
cronos 2
小结
这是一篇我四处碰壁之后得到的一个相对于初学者来说最完整的安装教程与基础使用教程,已经尽可能规避掉所有的错误点
在这里我提醒一下,一定一定要将放在公网的服务器安全组配置完备,不然的话hadoop集群会被不怀好意的人植入病毒然后拿去挖矿,我已经被坑过两次了,服务器也重置了两次
最后,给我点个关注点个赞呗,之后我还会出HBASE的配置和hadoop的使用教程