大数据hadoop平台环境搭建
想往大数据方向转, 难度肯定是有的。
基础知识肯定是要有的,如果是熟悉JAVA开发的人,转向应该优势大。
像我这样的,只有Linux基础以及简单的PHP基础的人,转向难度很大。但是事在人为,努力学习多加练习,寻找机会应该可以的。
以下是学习笔记,自己的笔记自己看懂,所以尽量简短 :
T440P上装了Vm12, 添加三台Centos6.5 各1G内存,按照下方的笔记内容设置网络和环境。
前面部分的都是centos的基本操作。涉及vim, 以及一些Linux命令。
设置时间、主机名、IP、关闭防火墙,开启互信,安装JDK,添加环境变量等。
三台机器:master, slave1, slave2
############# vim ###########################################
命令模式下:
1)把光标移动到要复制的行上,按yy (复制当前行)
2)把光标移动到要复制的位置 ,按p (粘贴到指定行)
3)把光标移动到要复制的位置 ,按dd(删除当前行)
移动光标: hjkl 左下上右
ctrl+u:到文件头
ctrl+d:到文件尾
shift+h:到屏幕第一行,shift+m:到屏幕中间,shift+l:到最后一行, shift+zz 保存退出
:n 到第n 行
^ 到行首,$ 到行尾 (这两个与正则一样)
查找:
/xx 查找xx
n下一个,N上一个
撤销更改:u:取消更改
插入:a从光标后,i从光标前,o从光标下一行
##配置文件 vim /etc/vimrc
set nu # 行号
set ts=4 # tab距离4空格
set et # tab转换为真正的空格
# modeline 相当于文件格式配置
# vim:et:ts=4:sw=4:
############# vim end #########################################
pwd
ls -al
cat 1.txt | sort -k1 -nr #显示文件,k1第一列,n转换成数字 r降序
> 1.txt # 清空文件内容
tail -F 1.txt #追踪某文件的内容.
kill -s 9 1827 #强杀进程
date -s "2018-01-01 14:22:33" # 修改时间 参数后面加字符串
clock -w # 写入硬件时钟
date -R #显示时区
tzselect #时区向导
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #修改时区
yum install ntp # 安装ntp服务
ntpdate pool.ntp.org # ntp对时
chkconfig ntpd on
/etc/init.d/ntpd start
clock -w # 写入硬件时钟
vim /etc/rc.local #可设置开机启动项目
#例如,在最后加上 /etc/init.d/mysqld start则可以启动mysqld
# mongodb的启动命令
/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/dblogs --fork
############################### user ###############################
useradd test
passwd test
vim /etc/sudoers # 为新用户添加sudo权限. 这样test用户才可以使用sudo
test ALL=(ALL) ALL
userdel -r test
vim /etc/passwd #可以查看系统中的所有用户
root:x:0:0:root:/root:/bin/bash
# 用户名:密码x:用户id0:组id0:描述信息root:用户根目录/root/:用户登录后的shell
# x 是表示此处为空;采用shadow passwd,影子密码在 /etc/shadow 文件
############################ network ###############################
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="static"
HWADDR="00:0C:29:F5:05:8E"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
IPADDR=192.168.112.10
NETMASK=255.255.255.0
GATEWAY=192.168.112.2
DNS1=192.168.112.2
##可删除HWADDR,UUID
service network restart
##网卡更换后,可编辑 vim /etc/udev/rules.d/70-persistent-net.rules
reboot
ifconfig
curl www.baidu.com
netstat #网络端口监听 -a显示所有选项, -t仅显示TCP, -u仅显示UDP, -l仅列出有监听的.
netstat -nltp
#修改hosts和主机名
# 修改/etc/hosts 以及/etc/sysconfig/network 文件, 分别设置不同的HOSTNAME
vim /etc/hosts
192.168.112.10 master
192.168.112.11 slave1
192.168.112.12 slave2
hostname master
vim /etc/sysconfig/network
HOSTNAME=master
### 每台都要 关闭下列防火墙
service iptables stop
setenforce 0
chkconfig iptables off
################################# crontab #################################
# crontab:
crontab -l #查看当前用户的crontab内容.
crontab -r #删除定时任务配置,如果不指定用户,则删除当前用户的.
crontab -e #编辑某个用户的crontab内容.
#crontab格式
#分 时 日 月 周 命令
0 0 * * * /shell/upFile2HDFS.sh #每天0点执行一次
*/1 * * * * date >> /test/date.txt #每分钟将时间写入文件
30 21 * * * /usr/local/etc/rc.d/httpd restart #每天21:30执行一次命令
0,30 18-23 * * 6,0 /usr/local/etc/rc.d/httpd restart #每个周六,周日的18点到23点,每隔30分钟
################################# 建立每台电脑的互信关系 #################################
ssh-keygen #创建.ssh目录
ssh-copy-id slave1 #复制公钥到每台目标主机
ssh root@slave1 ##或者 ssh root@slave2 都能成功,不用密码,则互信成功.
################################# JDK #################################
rpm -qa | grep java #先查看自带java 如果有就卸载
rpm -e --nodeps java-1.4.2-gcj-compat-1.4.2.0-40jpp.115 #卸载
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5 #卸载
#或者yum -y remove 卸载
yum -y remove java-1.4.2-gcj-compat #
# 使用挂载方式或sftp上传java到主机
# secureCRT中alt+p可开启sftp. 或者安装lrzsz
yum -y install lrzsz #安装后,rz上传,sz下载
cd /mnt/hgfs
cp -R share_folder /usr/local/src
cd /usr/local/src
./jdk-6u45-linux-x64.bin
# 如果是tar包, 就tar -zxvf jdk-8u161-linux-x64.tar.gz
# 推荐使用此种方式
cd /usr/local/src/jdk1.8.0_161
# 修改用户下面的 .bash_profile文件,也可以用root用户修改/etc/profile文件
vim /etc/profile
...
export JAVA_HOME=/usr/local/src/jdk1.8.0_161
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source /etc/profile #重新加载这个配置文件
which java
java -version
# 如果要使用 sudo java -version 则需要 sudo visudo ,然后在 secure_path 后面添加 :/opt/jdk1.8.0_161/bin
scp -rp /etc/profile slave1:/usr/local/src
scp -rp /etc/profile slave2:/usr/local/src
######################## hadoop #################################
#前提:主机名/hosts/时间同步/JDK/关闭防火墙/互信
cd /usr/local/src
tar -zxvf hadoop-2.7.5.tar.gz
cd hadoop-2.7.5
mkdir tmp #创建hadoop运行时所需的临时目录 /usr/local/src/hadoop-2.7.5/tmp
cd etc/hadoop
vim hadoop-env.sh
export JAVA_HOME=/usr/local/src/jdk1.8.0_161
vim core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/src/hadoop-2.7.5/tmp</value>
</property>
<!-- property>
<name>io.file.buffer.size</name>
(用作序列化文件处理时读写buffer的大小)
<value>131702</value>
</property -->
vim hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave1:50090</value>
</property>
vim mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!--历史服务器,查看Mapreduce作业记录-->
<!--
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
-->
<!-- 连接jobtrack服务器的配置项,默认不写是local -->
<!--
<property>
<name>mapred.job.tracker</name>
<value>http://cy-hmaster-01:9001</value>
</property>
-->
vim yarn-site.xml
<!-- 指定YARN的老大 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<!-- NodeManager上运行的附属服务.需配置成mapreduce_shuffle 才可运行MapReduce程序默认值 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
vim slaves
master
slave1
slave2
#写上各个主机名
## 再次编辑profile
vim /etc/profile
#增加如下两行
export HADOOP_HOME=/usr/local/src/hadoop-2.7.5
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
:wq
ls -rlt #修改了6个配置文件
#### 注意: 配置文件如果写了中文,一定要注意编码问题。最好不出现中文。
# -site.xml文件优先于default.xml生效
# 全部复制到其它机器
scp -r hadoop-2.7.5/ root@slave1:/usr/local/src
scp -r hadoop-2.7.5/ root@slave2:/usr/local/src
scp -r /etc/profile root@slave1:/etc/
scp -r /etc/profile root@slave2:/etc/
source /etc/profile
###################### hadoop 启动 ###########################
hdfs namenode -format # HDFS 初始格式化, 只能进行一次.
start-dfs.sh # 启动HDFS
start-yarn.sh # 启动YARN
sbin/start-all.sh #启动所有 旧版本使用
jps #查看NameNode 和 DataNode 如果有则正常.
###################### hadoop 操作 ###########################
http://master:50070 # Web界面 在NameNode上
http://master:8088 # 在ResourceManager上
hdfs dfs -ls -h / #查看文件列表 -h表示使用人性化方式显示文件大小
hdfs dfs -mkdir /hello #创建目录 -p表示如果没有父目录,就一起创建。
hdfs dfs -put -f /etc/passwd / #上传文件 -f 覆盖已存在的.
hdfs dfs -appendToFile 2.txt /1.txt #把2的文件内容附加到1里 .
hdfs dfs -get /hello ./ #下载文件到本地系统当前目录 -crc 加上校验。
hdfs dfs -getmerge /hello/log.* ./ #合并下载多个文件到本地系统当前目录。
hdfs dfs -cat /passwd #显示文件
hdfs dfs -tail /passwd #显示文件最后1千字符
hdfs dfs -rm -r /aaa/bbb/ #只删除空目录和文件, -r则递归删除.
hdfs dfs -df -h / #统计文件系统的可用空间.
hdfs dfs -du /hello #显示目录中所有文件大小.
hdfs dfs -setrep -w 3 -R /user # 改变一个文件的副本系数. -R用于递归改变目录下的所有文件副本系数.
hdfs dfsadmin -report #查看报告
cd /usr/local/src/hadoop-2.7.5/share/hadoop/mapreduce
hadoop jar hadoop-mapreduce-examples-2.7.5.jar pi 20 50 #运行一个示例mapreduce
# hadoop程序建议使用hadoop开头的命令, hdfs操作建议使用hdfs开头. 两种命令要有所区分
hadoop fs -ls hdfs://master:9000/
hadoop fs -ls /
hadoop fs -ls file:///root
# yarn
yarn rmadmin –getServiceState rm1 #查看状态的命令
yarn rmadmin –transitionToStandby rm1 #状态切换的命令
####################### HDFS 原理 #############################################
NameNode是HDFS的核心,称为Master,
NameNode仅存储HDFS的元数据:文件系统中所有文件的目录树,并跟踪整个集群中的文件.
NameNode不存储实际数据或数据集,数据本身存储在DataNode中,
NameNode知道HDFS中任何给定文件的块列表及其位置,使用此信息NN知道如何从块中构建文件.
NN并不持久化存储每个文件中各个块所在DN的位置信息,这些信息会在系统启动时从数据节点重建
NN对于HDFS至关重要,当NN关闭时,hadoop集群无法访问. NN是Hadoop集群中的单点故障.
NN所在机器通常会配置大量内存RAM.
DN启动时,将自己发布到NN并汇报自己负责持有的块列表.
当某个DN关闭时,它不会影响数据或集群的可用性,NN将安排其它DN管理的块进行副本复制.
DN所在机器通常配置大量硬盘空间.因为实际数据存储在DN中,
DN会定期(dfs.heartbeat.interval配置项,默认3秒)向NN发送心跳,如果NN长时间没有收到DN发送的心跳,NN就会认为该DN失效.
block汇报时间间隔取参数dfs.blockreport.intervalMsec 参数未配置的话默认为6小时.
##################################### HDFS工作机制 #############################
Secondary NameNode 协助NN进行元数据的备份. 可以理解为NN的秘书
客户端请求访问HDFS都是通过向NN申请来进行.
补充: 单机伪分布式
########################### 以下是补充的单机和伪分布的知识###########################
# hostname 不能使用带下划线的
#
第二节:Hadoop的本地模式
1、特点:不具备HDFS,只能测试MapReduce程序
2、修改hadoop-env.sh
修改大约第25行:export JAVA_HOME=/usr/local/src/jdk1.8.0_161
3、演示Demo: $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar
命令:hadoop jar hadoop-mapreduce-examples-2.4.1.jar wordcount /root/data/input/data.txt /root/data/output/wc
日志:17/08/04 23:28:38 INFO mapreduce.Job: map 100% reduce 100%
注意:MR有一个默认的排序规则
第三节:Hadoop的伪分布模式
1、特点:具备Hadoop的所有功能,在单机上模拟一个分布式的环境
(1)HDFS:主:NameNode,数据节点:DataNode
(2)Yarn:容器,运行MapReduce程序
主节点:ResourceManager
从节点:NodeManager
2、步骤:
# 注意:hostname 不能使用带下划线的,修改以下5个文件的配置即可
(1)hdfs-site.xml
<!--配置HDFS的冗余度-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!--配置是否检查权限-->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<!-- 也可以指定HDFS块大小 -->
<property>
<name>dfs.blocksize</name>
<value>32m</value>
</property>
(2)core-site.xml
<!--配置HDFS的NameNode-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.88.11:9000</value>
</property>
<!--配置DataNode保存数据的位置-->
<property>
<name>hadoop.tmp.dir</name>
<value>/root/training/hadoop-2.4.1/tmp</value>
</property>
(3) mapred-site.xml
<!--配置MR运行的框架-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
(4) yarn-site.xml
<!--配置ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>192.168.88.11</value>
</property>
<!--配置NodeManager执行任务的方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
(5) slaves
# 只放一个本机hostname 即可,或者 localhost
(6) 格式化NameNode
hdfs namenode -format
日志:Storage directory /root/training/hadoop-2.4.1/tmp/dfs/name has been successfully formatted.
(7) 启动:start-all.sh
(*) HDFS: 存储数据
(*) Yarn:执行计算
检查以下进程是否启动:
SecondaryNameNode
ResourceManager
NodeManager
DataNode
NameNode
(8) 访问:(*)命令行
(*)Java API
(*)Web Console:
HDFS:http://192.168.88.11:50070
Yarn:http://192.168.88.11:8088
###########################################################################################