赞
踩
传送门:hadoop集群搭建 https://blog.csdn.net/gg_xiajie/article/details/118095901
前面写完了hadoop集群的安装,算是初步开始学习了。。。
本章学习下hadoop的一些基本操作。
启动hadoop之后可以打开hdfs的可视化页面
http://hadoop01:9870/
可视化的文件系统在
这里是部分数据我练习的时候插入好了的
手动上传文件到hdfs,命令:
# 创建文件夹(根目录创建名为input的文件夹)
hadoop fs -mkdir /input
# 上传文件(上传1.txt到input文件夹)
hadoop fs -put 1.txt /input
错误示范:
# 文件夹不存在
hadoop fs -put 1.txt /input1/
# 会上传到根目录,名称为input2
hadoop fs -put 1.txt /input2
数据存放在之前集群配置的dataNode地址中,例如我的
/home/hadoop/software/hadoop/data/dfs/data/current/BP-1512100918-192.168.0.101-1624284033781/current/finalized/subdir0/subdir0
默认每个文件的存储块是128m,超过128m的会被分割,不足128m占据其实际容量
如上传较大文件,我拿hadoop安装包系统举例
上传完成后
上图可以看到占据了3个存储块,每个存储块对应不同的BlockID,Size是其占据当前存储块的真实容量,其中134217728就是128m
到文件空间看下可以看到
把文件拼接起来就是完整的压缩包
# 文件拼接
cat [部分文件] >> [完整文件名]
# 本次Hadoop被拆成了3份文件
blk_1073741861>>data.tar.gz
blk_1073741862>>data.tar.gz
blk_1073741863>>data.tar.gz
# 解压
tar -zxvf data.tar.gz
解压完成后就是上传的完整文件
记住,如果需要删除文件,尽量使用命令或者在web页上去删除,因为是分布式的,默认是3份,也就是3台机器都会存一份文件,如果你直接在liunx系统里面删除的话其他机器还是存在的
#删除文件
hadoop fs -rm -f /test
#删除文件夹
hadoop fs -rm -r /testdir
#查看
hadoop fs -ls /
更多命令详见官网 http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.html
在Hadoop安装包中,有官方给的代码例子
# 目录
hadoop/share/hadoop/mapreduce
# 代码案例
hadoop-mapreduce-examples-3.1.3.jar
有时间的朋友可以下载下来看下,我这只使用了里面一个word count的命令
新建一个文件,并上传到hdfs
vim 1.txt
这是一个安静的晚上
我是天神、我是魔鬼、我是无敌的
无敌的我、又迷路了 无敌的我、又迷路了
无敌的我、又迷路了
hadoop fs -mkdir /input
hadoop fs -put 1.txt /input
提交jar包
# hadoop jar [jarPath] [args]
# 本次三个参数分别为函数名:wordcount,输入文件路径/input,输出文件路径/output,这里的文件路径都是针对hdfs的路径
hadoop jar /home/hadoop/software/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output
然后去先前配置的ResourceManager地址去看,我是在192.168.0.102上
http://hadoop02:8088/
箭头指向的地方可以查看进程执行到什么地方了
这里可以查看历史,不过要先进行配置并启动历史服务器
配置方法(要配置集群中的每一台机器),配置完成后重启
# 修改mapred-site.xml,新增历史服务器web端地址 <configuration> <!-- 指定 MapReduce 程序运行在 Yarn 上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop01:10020</value> </property> <!-- 历史服务器 web 端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop01:19888</value> </property> </configuration>
启动hdfs,启动yarn后再启动历史服务器,在配置的机器上进行操作
mapred --daemon start historyserver
之后就可以查看历史任务
配置日志集成,然后重启
# 修改yarn-site.xml为如下内容,实际为新增了最下面的三个配置 <configuration> <!-- 指定 MR 走 shuffle --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定 ResourceManager 的地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop02</value> </property> <!-- 环境变量的继承 --> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property> <!-- 开启日志聚集功能 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 设置日志聚集服务器地址 --> <property> <name>yarn.log.server.url</name> <value>http://hadoop01:19888/jobhistory/logs</value> </property> <!-- 设置日志保留时间为 7 天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property> </configuration>
点击如下界面即可查看历史数据
因为经常重启与更新配置,每次来回重启和修改太过于麻烦,这里写了几个脚本
##### 1、同步服务器的数据(xsync)
#!/bin/bash #1. 判断参数个数,如果没有参数,返回错误 if [ $# -lt 1 ] then echo Not Enough Arguement! exit; fi #2. 遍历集群所有机器,(如果没有配置host和主机名建议配置一下,不然就写IP地址) for host in hadoop02 hadoop03 hadoop01 do echo ==================== $host ==================== #3. 遍历所有目录,挨个发送 for file in $@ do #4. 判断文件是否存在 if [ -e $file ] then #5. 获取父目录(其实就是挨个执行,其中file是你输入的文件名,然后获取当前文件的绝对路径) pdir=$(cd -P $(dirname $file); pwd) #6. 获取当前文件的名称 fname=$(basename $file) #7. 通过ssh登录目标服务器,先创建文件夹 ssh $host "mkdir -p $pdir" #8. 使用rsync进行拷贝,rsync与scp相比最大的好处是会先去比较差异,如果没有差异的文件则不会更新,如果不存在也会进行插入 # 如果没有rsync的话用yum install一下,命令为:yum install rsync rsync -av $pdir/$fname $host:$pdir else echo $file does not exists! fi done done
#!/bin/bash if [ $# -lt 1 ] then echo "No Args Input..." exit ; fi case $1 in "start") echo " =================== 启动 hadoop 集群 ===================" echo " --------------- 启动 hdfs ---------------" # 1.这里最好写绝对路径,或者你配置了环境变量也可以,具体ssh到哪台机器上以及启动哪个命令根据你自己配置定义 ssh hadoop01 "/home/hadoop/software/hadoop/sbin/start-dfs.sh" echo " --------------- 启动 yarn ---------------" ssh hadoop02 "/home/hadoop/software/hadoop/sbin/start-yarn.sh" echo " --------------- 启动 historyserver ---------------" ssh hadoop01 "/home/hadoop/software/hadoop/bin/mapred --daemon start historyserver" ;; "stop") echo " =================== 关闭 hadoop 集群 ===================" echo " --------------- 关闭 historyserver ---------------" ssh hadoop01 "/home/hadoop/software/hadoop/bin/mapred --daemon stop historyserver" echo " --------------- 关闭 yarn ---------------" ssh hadoop02 "/home/hadoop/software/hadoop/sbin/stop-yarn.sh" echo " --------------- 关闭 hdfs ---------------" ssh hadoop01 "/home/hadoop/software/hadoop/sbin/stop-dfs.sh" ;; *) echo "Input Args Error..." ;; esac
脚本的格式可以是***.sh,或者直接***
例如我的两个名称(xsync与hadoopall)
使用chmod命令授予执行权限
chmod 777 xsync
chmod 777 hadoopall
执行完毕之后是这样的,最好配置下环境变量,方便后续直接在任意目录使用
如,我在/etc/profile.d下创建了一个为my-env.sh的文件,文件内容如下,这样的话我的所有在myshell下的命令都可以进行执行了
# JAVA_HOME
export JAVA_HOME=/home/hadoop/software/jdk8
export PATH=$PATH:$JAVA_HOME/bin
# HADOOP_HOME
export HADOOP_HOME=/home/hadoop/software/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# MYSHELL
export PATH=$PATH:/home/myshell
ile.d下创建了一个为my-env.sh的文件,文件内容如下,这样的话我的所有在myshell下的命令都可以进行执行了
# JAVA_HOME
export JAVA_HOME=/home/hadoop/software/jdk8
export PATH=$PATH:$JAVA_HOME/bin
# HADOOP_HOME
export HADOOP_HOME=/home/hadoop/software/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# MYSHELL
export PATH=$PATH:/home/myshell
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。