IT十八掌徐培成HADOOP笔记28068.docx
《IT十八掌徐培成HADOOP笔记28068.docx》由会员分享,可在线阅读,更多相关《IT十八掌徐培成HADOOP笔记28068.docx(50页珍藏版)》请在冰豆网上搜索。
IT十八掌徐培成HADOOP笔记28068
Hadoop
本机集群机器:
211212215216四台对应s100s101s102s103s104
Ubuntu204-server-64-2-00100s100211node1
Ubuntu204-server-64-2-01101s101212node2
Ubuntu204-server-64-2-02102s102215node3
Ubuntu204-server-64-2-03103s103215node3
Ubuntu204-server-64-2-04104s104216node4
a)bigdate
海量数据:
1byte=8bit
1024B=1M2^10
1024M=1G2^10
1024G=1T2^10
1024T=1P2^10
1024P=1E2^10
1024E=1Z2^10
1024Z=1Y2^10
123123
1024Y=1N2^10
存储分布式存储
计算分布式计算
Hadoop(一头大象)Dougcutting
Hadoop可靠,可伸缩,分布式计算的开源软件。
HDFS
去IOE(IBM+oracle+EMC)
MapReduce
MR//映射和化简,编程模型
推荐
Bigdata4V
1)Volumn//题量大
2)Variaty//样式多
3)Velocity//速度快
4)Valueless//价值密度低
b)Hadoop的安装:
(安装ubuntu系统)
安装jdk
Ln–s/soft/jdk-xxxjdk
配置环境变量
JAVA_HOME=/soft/jdk
PATH=”…:
/soft/jdk/bin”
Source/etc/environment
Java–version
安装hadoop
Hadoop.tar.gz
Hadoopversion
配置环境变量
HADOOP_HOME
PATH
配置hadoop分三个模式:
1.standelone|local//独立/本地模式,使用的本地文件系统
Nothing
查看文件系统的方式:
查看文件系统hadoopfs–ls/
没有守护进程,所有程序运行在同一JVM中,利用test和debug.
2.PaeudodistributedMode//伪分布模式
3.Fullydistributedmode//完全分布式
配置SSH
1)安装ssh
$sudoapt-getinstallssh
2)生成密钥对
Ssh-keygen–trsa–P‘’–f~/.ssh/
Cd~/.ssh
3)导入公钥数据到授权库中
Cat~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys
4)登录到localhost
Sshlocalhost
5)格式化hdfs文件系统
Hadoopnamenode-format
6)启动所以进程
Start-all.sh
7)查看进程
Jps//5RMNMNNDN2NN
8)查看文件系统
Hadoopfs-ls
9)创建文件系统
Hadoopfs–mkdir–p/user/Ubuntu/data
Hadoopfs–ls–R/
c)Hadoop包含三个模块
1)Hadoopcommon:
支持其他模块的工具模块
2)HadoopDistributedFileSystem(HDFS)
分布式文件系统,提供了对应用程序数据的高吞吐量访问。
进程:
NameNode名称节点NN
DataNode数据节点DN
SecondaryNamenode辅助名称节点2ndNN
3)HadoopYARN:
作业调度与集群资源管理的框架。
进程
ResourceManager资源管理—RM
NodeManager节点管理器—NM
4)HadoopMapReduce:
基于yarn系统的对大数据集进行并行处理技术
配置hadoop
1)Standelone/local
d)完全分布式安装:
1)准备5台客户机
本人集群机器:
211212215216四台对应s100s101s102s103s104
ip主机名ip主机名
1.Ubuntu204-server-64-2-00100s100211node1
2.Ubuntu204-server-64-2-01101s101212node2
3.Ubuntu204-server-64-2-02102s102215node3
4.Ubuntu204-server-64-2-03103s103215node3
5.Ubuntu204-server-64-2-04104s104216node4
2)安装ssh
1)安装ssh
$sudoapt-getinstallssh
2)生成密钥对
ssh-keygen–trsa–P‘’–f~/.ssh/
cd~/.ssh
3)导入公钥数据到授权库中
cat~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys
scp/root/.ssh/*node2@:
/root/.ssh/
scp/root/.ssh/*node3@:
/root/.ssh/
scp/root/.ssh/*node2@:
/root/.ssh/
4)登录其他机器:
sshnode1
ifconfig
3)安装jdk
1.rpm-ivh/opt/jdk-7u79-linux-x64.rpm
2.ln–s/soft/jdk-xxxjdk
3.配置环境变量
4.JAVA_HOME=/soft/jdk
5.PATH=”…;/soft/jdk/bin”
6.source/etc/profile
7.java–version
4)安装hadoop
1.tar–zxvfhadoop-2.7.3.tar.gz
2.Hadoopversion
3.配置环境变量
4.HADOOP_HOME=/soft/hadoop-2.7.3
5.PATH=…:
$HADOOP_HOME/bin:
$HADOOP_HOME/sbin
6.配置hadoop
查看文件系统hadoopfs–ls/
配置文件/etc/hadoop/
core-site.xml
fs.default.name
hdfs:
//node1:
8020
Hdfs-site.xml
dfs.replication
3
Mapred-site.xml
mapreduce.framework.name
yarn
Yarn-site.xml
yarn.resourcemanager
localhost
yarn.nodemanager.aux-services
mapreduce_shuffle
5)配置文件
-rw-r--r--.1rootroot8616月610:
41core-site.xml
-rw-r--r--.1rootroot9506月610:
41hdfs-site.xml
-rw-r--r--.1rootroot8446月610:
41mapred-site.xml
-rw-r--r--.1rootroot7286月610:
43yarn-site.xml
-rw-r--r--.1rootroot126月610:
43slaves
/soft/hadoop/etc/hadoop/core-site.xml
fs.defaultFS=hdfs:
//node1/
/soft/hadoop/etc/hadoop/hdfs-site.xml
replication=3
dfs.namenode.secondary.http-address=node4:
50090
/soft/hadoop/etc/hadoop/mapred-site.xml
mapreduce.framework.name=yarn
soft/hadoop/etc/hadoop/yarn-site.xml
yarn.resourcemanager.hostname=node1
/soft/hadoop/etc/hadoop/slaves
node2
node3
在集群上分发以上三个文件
cd/soft/hadoop/etc/hadoop
xsynccore-site.xml
xsyncyarn-site.xml
xsyncslaves
6)首次启动hadoop
1)格式化文件系统
$>hadoopnamenode-format
2)启动所有进程
$>start-all.sh
3)查询进程
jsp
4)停止所有进程
Stop-all.sh
使用webui访问hadoophdfs
1)hdfshttp:
/node1:
50070
2)dataNodehttp:
//node2:
50075
3)2nnhttp:
//node4:
50090
删除hadoop临时目录数据:
默认:
/tmp/hadoop-roothadoop-root-datanode.pid(伪分布式产生)
e)几种脚本scprsyncxsyncxcall
1)scp
2)rsync远程同步工具主要备份和镜像支持链接,设备。
rsync–rvl/soft/*ubuntu@s101:
/soft
3)自定义脚本xsync,在集群上分发文件
循环复制文件到所以节点的相同目录下
rsync–rvl/home/Ubuntuubuntu@s101:
xsynchello.txt
[/usr/local/bin/xsync]
[root@node1bin]#vimxsync
#!
/bin/bash
pcount=$#
if((pcount<1));then
echonoargs;
exit;
fi
p1=$1;
#获取文件名称
fname=`basename$p1`
echofname=$fname;
#获取上级目录的绝对路径
pdir=`cd-P$(dirname$p1);pwd`
echopdir=$pdir;
#echo$p1;
cuser=`whoami`
for((host=2;host<5;host=host+1));do
echo----------node$host---------
#echo$pdir/$fname$cuser@node$host:
$pdir
scp$pdir/$fname$cuser@node$host:
$pdir
done
4)编写/usr/local/bin/xcall脚本,在所有主机上执行相同的命令
xcallrm–rf/soft/jdk
[/usr/local/bin/xcall]
[root@node1bin]#cd/usr/local/bin
[root@node1bin]#xcallls-l/soft/
[root@node1bin]#xcallrmhello.txt
[root@node1bin]#vimxcall
#!
/bin/bash
pcount=$#
if((pcount<1));then
echonoargs;
exit;
fi
echo--------localhost-------
$@
echo$@
for((host=2;host<5;host=host+1));do
echo----------node$host---------
#scp$pdir/$fname$cuser@node$host:
$pdir
sshnode$host$@
done
f)整理hadoop的所有类库和配置文件
解压缩hadoop-2.7.2.tar.gz到目录下
整理jar包
抽取所有配置文件
[core_default.xml]
hadoop-common-2.7.2.jar/core-default.xml
[hdfs-default.xml]
hadoop-hdfs-2.7.2.jar/hdfs-default.xml
[yarn-default.xml]
hadoop-yarn-common-2.7.3.jar/hdfs-default.xml
[mapred-default.xml]
hadoop-mapreduce-client-core-2.7.2.jar/mapred-default.xml
g)hadoopfs/使用:
hadoopfs–mkdir–p/user/Ubuntu/data
hadoopfs–puthello.txt/user/Ubuntu/data/
hdfsdfs-lsr/
hdfsdfs-cat/user/hello.txt
./hadoopfs-ls/
./hadoopfs–ls–R/
./hadoopfs-mkdirtest
./hadoopfs-put/opt/test.sh/user将本地文件存储至hadoop
./hadoopfs–get/user/t/ok.txt/home/t将hadoop上某个文件down至本地已有目录下
./hadoopfs-cat/user/test.sh
hadoopfs–rmr/user/t删除hadoop上指定文件夹(包含子目录等)
hadoopfs-touchz/user/new.txt在hadoop指定目录下新建一个空文件
hadoopfs–mv/user/test.txt/user/ok.txt(将test.txt重命名为ok.txt)
hadoopdfs–getmerge/user/home/t将hadoop指定目录下所有内容保存为一个文件,同时down至本地
hadoopjob–kill[job-id]将正在运行的hadoop作业kill掉
h)修改本地的临时目录hadoop.tmp.dir
1)修改hadoop.tmp.dir
[core-site.xml]
hadoop.tmp.dir
/soft/hadoop-root
2)分发core-site.xml
3)hadoopnamenode–format后重启hadoop
xcallmkdir/soft/hadoop-root
xcallrm–rf/soft/hadoop/logs
i)hadoop模块
1.common
2.hdfs
start-dfs.sh/stop-dfs.sh(先启动它)
nn
dn
2nn
3.yarn
start-yarn.sh/stop-dfs.sh
rn
nn
4.mapred
j)hadoop脚本分析
1.start-all.sh
libexec/hadoop-config.sh--设置变量
sbin/start-dfs.sh–config$HADOOP_CONF_DIR--启动hdfs
sbin/start-yarn.sh–config$HADOOP_CONF_DIR--启动yarn
2.libexec/hadoop-config.sh--设置变量
COMMON_DIR
…
HADOOP_CONF_DIR=…
HEAP_SIEZ=1000M,
CLASSPATH=…
3.sbin/start-dfs.sh–config$HADOOP_CONF_DIR启动hdfs
1.libexec/hdfs-config.sh
2.获取名称节点主机名
NAMENODES=hdfsgetconf–namenodes
3.启动名称节点
$HADOOP_prefix/sbin/hadoop-daemons.sh
--config$hadoop_conp_dir
--hostnames$namenodes
--script$bin/hdfsstartnamenode$nameStartOpt
4.启动datanode
$HADOOP_prefix/sbin/hadoop-daemons.sh
--config$hadoop_conp_dir
--script$bin/hdfsstartdatanode$nameStartOpt
5.启动2nn
$HADOOP_prefix/sbin/hadoop-daemons.sh
--config$hadoop_conp_dir
--hostnames$secondarynamenode
--script$bin/hdfsstartsecondarynamenode
4.libexec/hdfs-config.sh
libexec/hadoop-config.sh
5.sbin/hadoop-daemons.sh--启动守护进程脚本
1.libexec/hdfs-config.sh--执行配置脚本
2.slaves.sh--config$HADOOP_CONF_DIRcd$hadoop_prefic\;
$bin/hadoop-daemon.sh–config$hadoop_conf_dir“$@”
循环slaves文件,通过ssh方式登录远程主机,执行相应命令
[bin/hadoop-daemon.sh]
hadoop-config.sh
[bin/hdfs]
hdfsgetconf–namenodes
hdfsgetconf–secondaryNameNdoes
k)在各个机子上启动节点:
hadoop-daemon.shstartnamenode
hadoop-daemon.shstartsecondarynamenode
hadoop-daemon.shstartdatanode
hadoop-daemon.shstopdatanode
数据库四个特点:
aatomic原子性
cconsistent一致性
iisolation隔离性
ddurable永久性
l)常用命令:
格式化系统
hadoopnamenode–format
put===copyFormLocal
hadoopfs–put//hdfsdsf–put
hdfsdfs–put//
重命名
hdfsdfs–mv./sshd.txt./how.txt
下载
hdfsdfs–get./ssh.txt./kk.txt
hdfsdfs–copyToLocal
移动到hdfs
hdfsdfs–moveFromLocalhello.txt.
从hdfs移动到本地,没有实现。
删除文件
hdfsdfs–rmdir…
在hdfs上进行文件复制
hdfsdfs–cp/user/Ubuntu/hello.txt/user/hello2.txt
hadoop配置信息
namenode的本地目录配置成多个,则每个目录存放内容相同,可靠性。
【hdfs-site.xml】
dfs.namenode.name.dir=file:
///${hadoop.tmp.dir}/dfs/name1,file:
///${hadoop.tmp.dir}/dfs/name2
datanode也可以配置多个目录,不是副目录。
【hdfs-site.xml】
dfs.datanode.name.dir=file:
///${hadoop.tmp.dir}/dfs/name1,file:
///${hadoop.tmp.dir}/dfs/name2
hadoophdfs文件大小128M
磁盘的寻道时间=10ms
磁盘的IO速率:
100MB/s
10*100=ls*100M/s=100M
通过API访问hdfs
@Test
publicvoidwriteFile()throwsException{
Configurationconf=newConfiguration();
FileSystemfs=FileSystem.get(conf);
Pathpath=newPath("hdfs:
//node1:
8020/user/hello");
//数据输出流
FSDataOutputStreamdos=fs.create(path);
dos.write("helloworld!
!
!
".getBytes());
dos.close();