搭建hadoop
3. 搭建hadoop
3.1 安装JDK
参考:https://www.cnblogs.com/fushiyi/articles/15956398.html
3.2 设置免密
https://www.cnblogs.com/fushiyi/articles/15956398.html
3.3 下载hadoop包
百度云盘/常用下载/大数据组件/hadoop/xxx
或者镜像文件(d:/虚拟机实时计算镜像备份)中的/opt/hadoop/hadoop包
3.4 配置hadoop
参考:https://blog.csdn.net/qq_41946216/article/details/134345137
3.4.0 配置hadoop-env.sh
vim /opt/hadoop/hadoop-2.10.2/etc/hadoop/hadoop-env.sh
## hadoop伪分布式配置
export HADOOP_OS_TYPE=${HADOOP_OS_TYPE:-$(uname -s)}
export JAVA_HOME=/usr/java/jdk1.8.0_371
## hadoop集群配置(root指的是用户名)
export HADOOP_OS_TYPE=${HADOOP_OS_TYPE:-$(uname -s)}
export JAVA_HOME=/usr/java/jdk1.8.0_371
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
3.4.1 配置core-site.xml
mkdir /usr/local/hadoop/data
vim /opt/hadoop/hadoop-2.10.2/etc/hadoop/core-site.xml
<configuration>
<!-- 指定HDFS中NameNode的地址 默认 9000端口-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
<description>配置NameNode的URL</description>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/data</value>
</property>
----- 暂时不加 -----
分布式集群配置下面内容,伪分布式只需配置上面内容
<!--配置所有节点的root用户都可作为代理用户-->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<!--配置root用户能够代理的用户组为任意组-->
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<!--配置root用户能够代理的用户为任意用户-->
<property>
<name>hadoop.proxyuser.root.users</name>
<value>*</value>
</property>
----- 暂时不加 -----
</configuration>
3.4.2 配置hdfs-site.xml
mkdir -p /usr/local/hadoop/dfs/name
mkdir -p /usr/local/hadoop/dfs/data
vim /opt/hadoop/hadoop-2.10.2/etc/hadoop/hdfs-site.xml
<configuration>
<!-- 数据的副本数量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!-- nn web端访问地址 默认也是9870-->
<property>
<name>dfs.namenode.http-address</name>
<value>master:9870</value>
</property>
<!--设置权限为false-->
<property>
<name>dfs.permissions.enabled </name>
<value>false</value>
</property>
<!--设置元数据存储目录-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///usr/local/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///usr/local/hadoop/dfs/data</value>
</property>
<!-- 集群配置使用 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>worker01:9868</value>
</property>
</configuration>
3.4.3 配置yarn-site.xml
vim /opt/hadoop/hadoop-2.10.2/etc/hadoop/yarn-site.xml
<configuration>
<!-- NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MR程序。-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 伪分布式以下无需配置 -->
<!-- Site specific YARN configuration properties -->
<!-- yarn集群主角色RM运行机器。-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<!-- 每个容器请求的最小内存资源(以MB为单位)。-->
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>128</value>
</property>
<!-- 每个容器请求的最大内存资源(以MB为单位)。-->
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
</property>
<!-- 容器虚拟内存与物理内存之间的比率。-->
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>4</value>
</property>
<!-- 关闭yarn内存检查 flink on hadoop 配置-->
<!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是 true -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是 true -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
</configuration>
3.4.4 配置mapred-site.xml
vim /opt/hadoop/hadoop-2.10.2/etc/hadoop/mapred-site.xml
<configuration>
<!-- mr程序默认运行方式。yarn集群模式 local本地模式-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 以下配置为集群配置使用-->
<!-- MR App Master环境变量。-->
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<!-- MR MapTask环境变量。-->
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<!-- MR ReduceTask环境变量。-->
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<!-- 历史服务器端地址伪分布式和集群分布式都可以不配置 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
3.4.5 配置slaves
vim /opt/hadoop/hadoop-2.10.2/etc/hadoop/slaves
master
worker01
worker02
3.5 文件分发
## 这里只分发配置文件,如果之前没有解压包的,需要将hadoop整个文件夹分发
scp -r /opt/hadoop/hadoop-2.10.2/etc/hadoop root@worker01:/opt/hadoop/hadoop-2.10.2/etc/
scp -r /opt/hadoop/hadoop-2.10.2/etc/hadoop root@worker02:/opt/hadoop/hadoop-2.10.2/etc/
3.6 Hdfs格式化
cd /opt/hadoop/hadoop-2.10.2/
bin/hdfs namenode -format
cd /usr/local/hadoop/dfs/name
3.7 启动Hadoop集群
3.7.1 启动HDFS
cd /opt/hadoop/hadoop-2.10.2/sbin
./start-dfs.sh
3.7.2 启动Yarn
./start-yarn.sh
## 也可使用./start-all 同时启动hdfs和yarn
3.8 常用命令
3.8.1 hdfs常用命令
hdfs dfs -ls / # 查看文件目录
hdfs dfs -cat /hbase/hbase.id # 查看文件
hdfs dfs -put test1 test ## 上传test1文件
hdfs dfs -get test test1 ## 下载test文件
hdfs dfs -rm out ## 删除文件
hdfs dfs -mkdir /user/hadoop/examples 建立目录
3.8.2 hbase常用命令
status ## 查看服务器状态
version ## 查看服务器状态
--表操作
list ## 查看所有表
create 'Student', 'baseInfo','schoolInfo' ## 创建表
desc '表名' ## 查看表的基本信息
disable 'Student' ## 禁用表
is_disabled 'Student' ## 检查表是否被禁用
enable 'Student' # 启用表
is_enabled 'Student' ## 检查表是否被启用
exists 'Student' ## 检查表是否存在
disable 'Student' ## 删除表前需要先禁用表
drop 'Student' ## 删除表
---增删改
alter 'Student', 'teacherInfo' ## 添加列族
put 'Student', 'rowkey1','baseInfo:name','tom' ## 添加列,name即为列,再插入数据时添加
alter 'Student', {NAME => 'teacherInfo', METHOD => 'delete'} ## 删除列族
alter 'Student',{NAME=>'baseInfo',VERSIONS=>3} ## 更改列族存储版本的限制
--## 插入数据
put 'Student', 'rowkey1','baseInfo:name','tom' ## name即为列,再插入数据时添加
put 'Student', 'rowkey1','baseInfo:birthday','1990-01-09'
put 'Student', 'rowkey1','baseInfo:age','29'
put 'Student', 'rowkey1','schoolInfo:name','Havard'
put 'Student', 'rowkey1','schoolInfo:localtion','Boston'
put 'Student', 'rowkey2','baseInfo:name','jack'
put 'Student', 'rowkey2','baseInfo:birthday','1998-08-22'
put 'Student', 'rowkey2','baseInfo:age','21'
put 'Student', 'rowkey2','schoolInfo:name','yale'
put 'Student', 'rowkey2','schoolInfo:localtion','New Haven'
put 'Student', 'rowkey3','baseInfo:name','maike'
put 'Student', 'rowkey3','baseInfo:birthday','1995-01-22'
put 'Student', 'rowkey3','baseInfo:age','24'
put 'Student', 'rowkey3','schoolInfo:name','yale'
put 'Student', 'rowkey3','schoolInfo:localtion','New Haven'
put 'Student', 'fubo01','baseInfo:name','maike-jack'
--
get 'Student','rowkey3' # 获取指定行中所有列的数据信息
get 'Student','rowkey3','baseInfo' # 获取指定行中指定列族下所有列的数据信息
get 'Student','rowkey3','baseInfo:name' # 获取指定行中指定列的数据信息
delete 'Student','rowkey3' # 删除指定行
delete 'Student','rowkey3','baseInfo:name' # 删除指定行中指定列的数据
---查询
get 'Student','rowkey3'# 获取指定行中所有列的数据信息
get 'Student','rowkey3','baseInfo'# 获取指定行中指定列族下所有列的数据信息
get 'Student','rowkey3','baseInfo:name' # 获取指定行中指定列的数据信息
scan 'Student' # 查询整表数据
scan 'Student', {COLUMN=>'baseInfo'} ## 查询指定列簇的数据
---# 查询指定列的数据
scan 'Student', {COLUMNS=> 'baseInfo:birthday'}
scan 'Student', {COLUMNS=> 'baseInfo:name',STARTROW => 'fubo01',STOPROW => 'rowkey2',LIMIT=>2, VERSIONS=>3}
---## 条件过滤
scan 'Student', FILTER=>"ValueFilter(=,'binary:24')"
scan 'Student', FILTER=>"ValueFilter(=,'substring:yale')"
scan 'Student', FILTER=>"ColumnPrefixFilter('birth')"
scan 'Student', FILTER=>"ColumnPrefixFilter('birth') AND ValueFilter ValueFilter(=,'substring:1998')" # 列名中的前缀为birth且列值中包含1998的数据