hadoop完全分布式的搭建
hadoop四大模块:
common //hadoop核心类库
hdfs //分布式存储模块
mapreduce //分布式计算模块
yarn //资源调度模块
hadoop相关端口:
hdfs:
namenode(50070) //名称节点
datanode(50075) //数据节点
secondarynamenode(50090) //辅助名称节点
yarn:
resourcemanager(8088) //资源管理器
nodemanager //节点管理器
hadoop基本命令:
hdfs dfs -ls / //列出所有文件
hdfs dfs -lsr / //递归列出所有文件
hdfs dfs -mkdir -p /user //创建文件夹
hdfs dfs -touchz 1.txt //创建文件
hdfs dfs -put 1.txt /user //上传文件到指定目录
hdfs dfs -get /user //从hdfs下载文件
hdfs dfs -rm /1.txt //删除文件
hdfs dfs -rmr /user //递归删除
体验mapreduce:
1、创建文本文件1.txt
2、hdfs dfs -put 1.txt /
3、hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /1.txt /out
4、hdfs dfs -cat /out/part-r-00000
使用虚拟机hadoop完全分布式搭建:
1、使用链接克隆:
所有使用此克隆的客户机,都相当于对原客户机的引用,并在此基础上创建自己的修改
2、修改主机名和静态ip(s101-s104)
主机名:sudo nano /etc/hostname
ip: sudo nano /etc/sysconfig/network-scripts/ifcfg-ens33
修改完成之后重启客户机
3、修改ssh(s101-s104)
删除~/.ssh文件夹: rm -rf ~/.ssh
4、新建ssh公私秘钥对(s101)
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa -t是指定加密算法rsa, -P是指定密码 -f指定文件名:~/.ssh/id_rsa
5、修改hosts文件(s101)
ip地址+ s100
ip+ s101
ip s102
ip s103
ip s104
6、使用命令生成认证key(s101)
ssh-copy-id centos@s101
7、配置s102-s104免密登录(s101)
ssh-copy-id centos@s102
ssh-copy-id centos@s103
ssh-copy-id centos@s104
8、配置root用户的ssh免密登录
9、将s101的hosts文件分发到其他节点
scp 101.txt centos@s102:~
#!/bin/bash
user=`whoami`
for (( i=102 ; i<=104 ; i++ )) ; do
scp $1 $user@s$i:$2
done
12、配置文件
重新链接目录
./xcall.sh ln -sfT /soft/hadoop/etc/full/ /soft/hadoop/etc/hadoop
拷贝伪分布式配置文件
cp ${HADOOP_HOME}/etc/pseudo/* ${HADOOP_HOME}/etc/full/
修改slaves文件(从节点的主机名)
s102
s103
s104
修改hdfs-site.xml,将副本数从1改为3
修改临时目录(工作目录),修改core-site.xml,添加如下配置
<property>
<name>hadoop.tmp.dir</name>
<value>/home/centos/hadoop/full</value>
</property>
core-site.xml和yarn-site.xml中的s100要改成s101
13、分发配置文件
xsync.sh /soft/hadoop/etc
14、格式化hadoop文件系统
hdfs namenode -format
xcall.sh
#!/bin/bash
if [ $# -lt 1 ] ; then echo no params ; exit ; fi
for (( i=101 ; i<=104 ; i++ )) ; do
tput setaf 2
echo ================ s$i $@ ================
tput setaf 9
ssh s$i "$@"
done
xsync.sh
#!/bin/bash
if [ $# -lt 1 ] ; then echo no params ; exit ; fi
user=`whoami`
# 取出文件(夹)名称
filename=`basename $1`
dir=`dirname $1`
# 进入到文件(夹)所在的路径下
cd $dir
# 获取当前路径的绝对路径
fullpath=`pwd -P`
for (( i=102 ; i<=104 ; i++ )) ; do
tput setaf 2
echo ================ s$i $@ ================
tput setaf 9
rsync -lr $filename $user@s$i:$fullpath
done
more 分页查看
basename a/b/c/d ====> d 打印目录基本名称
dirname a/b/c/d ====> a/b/c 打印目录的父目录
scp不支持符号链接
rsync
注意:把脚本移动到usr/local/bin目录下,这样在别的文件夹下也方便使用