mr:
input–split—map—shuffler(洗牌,合并和排序)-reduce(浓缩)–final
split 默认是按行分 map的value默认按空格分隔
conf/mapred-site.xml:
?
?????
?????????mapred.job.tracker
?????????localhost:9001
?????
mr:
http://node1:50030 rpc端口是9001
hive -e “hql”
hive -f hql.file
hive jdbc hive-server2
hbase:hadoop database nosql列式存储(mogodb),非关系型数据库,hbase如何判断是同一行?通过看rowkey是否一致
timestamp:修改的版本
cf1:列族 column family 每个列都必须属于某个列族,一个列族下面可以有多个列
hadoop2.5.2:
1.hosts
2.免密码登录互相
3.tar -zxvf hadoop-2.5.2_x64.tar.gz
4.ls -sf /root/hadoop-2.5.2/ /home/hadoop-2.5
5.cd /home/hadoop-2.5/etc/hadoop
6.vi hadoop-env.sh:java_home
7.vi hdf-site.xml:
配置服务名:
?
??dfs.nameservices
??mycluster
配置nn的名字:
??dfs.ha.namenodes.mycluster
??nn1,nn2
配置两个nn的rpc:
??dfs.namenode.rpc-address.mycluster.nn1
??node1:8020
??dfs.namenode.rpc-address.mycluster.nn2
??node2:8020
配置两个nn的rpc:
??dfs.namenode.http-address.mycluster.nn1
??node1:50070
??dfs.namenode.http-address.mycluster.nn2
??node2:50070
配置journalnode的url地址:
??dfs.namenode.shared.edits.dir
??qjournal://node2:8485;node3:8485;node4:8485/mycluster
客户端使用下面的类找到active?nn:
??dfs.client.failover.proxy.provider.mycluster
??org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
配置私钥,文件名是什么就些什么:
??dfs.ha.fencing.methods
??sshfence
??dfs.ha.fencing.ssh.private-key-files
??/root/.ssh/id_dsa
配置jn的工作目录:
??dfs.journalnode.edits.dir
??/opt/jn/data
配置自动切换(也允许自动切换):
???dfs.ha.automatic-failover.enabled
???true
?
8.vi core-site。xml:
配置nn的入口(mycluster表示你前边配置的集群名字):
??fs.defaultFS
??hdfs://mycluster
配置zk所在机器:
?
???ha.zookeeper.quorum
???node1:2181,node2:2181,node3:2181
?
配置hadoop的工作目录:
???hadoop.tmp.dir
???/opt/hadoop2
?
9.安装zk3.4.6 3个机器上都要启动啊
10.vi slaves,配置datanode所在机器,journalnn替代了secondary nn:
node2
node3
node4
11.把压缩包拷贝到所有机器上,解压,并把所有配置文件拷贝过去
12. 在node2,node3,node4上./hdfs-daemon.sh start journalnode jps
13.在任意一台nn上执行:./bin/hdfs namenode -format,在hadoop工作目录(/opt/hadoop2)查看下fsimg是否生成了
14.启动(否则15步执行不成功)已经格式化过的nn:./hdfs-daemon.sh start namenode jps
15.在没有格式化的nn上执行,拷贝已经启动的nn上的fsimg:./bin/hdfs namenode -bootstrapStandby,cd /opt/hadoop2下看是否有fsimg生成
16.在任意一台nn上执行,会在zk上创建一个znode节点: ./bin/hdfs zkfc -formatZK
16。在node1上执行: ./sbin/stop-dfs.sh
17、在node1上执行: ./sbin/start-dfs.sh 会依次启动 nn,dn,jn,zkfc,zkfc
18.通过jps查看
19.http://node1:50070查看hdfs的管理界面 两个nn,用node2也可以
放个文件可以在浏览器上查看:
20. ./bin/hdfs dfs -mkdir -p /usr/file
21. ./bin/hdfs dfs -put /root/a.txt
配置mr:
22.vi mapred-site.xml:
指定mr放在yarn上:
mapreduce.framework.name
yarn
23.vi yarn-site.xml:
yarn.resourcemanager.hostname
node1
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.nodemanager.aux-services.mapreduce.shuffle.class
org.apache.hadoop.mapred.ShuffleHandler
24,./start-all.sh 访问rm(mapreduce的管理界面):
http://node1:8088(https 8090)
总结:即zkServer.sh start + start-all.sh
hive0.13.1,必须要有hadoop,在hdfs和mr都没问题的情况下再安装hive,放在集群中的任意一台机器上都可以:
cli:
hive -e “hsql”
hive -f “hsql.sql”
hive --help
hive -i x.sql :在hive启动的时候,用来初始化设定hive的属性
hive 进入交互式(客户端):
quit
selet a.* from tab1 a;
show databases;
show tables;
desc t_temp;
ddl:
create database if not exists db1;
drop database if exists db1;
use db1;
create table t_emp(
id int,
name string,
age int,
dept_name string
) partitioned by (ds string)
row format delimited fields terminated by ‘,’ stored as textfile;
create table t_person(
id int,
name string,
like array,
tedian map
row format delimited fields terminated by ‘,’
collection items terminated by ‘_’
map keys terminated by ‘:’;
1,zs,sports_play_read,xingge:baozao_sex:male_color:red
dml:
load data local inpath ‘/root/emp.txt’ into table t_emp partition(ds=‘2018-01-17’);
export table t_result to ‘/usr/input/result.txt’;#是hdfs的/usr/input/目录
dql:跟关系型db基本一样
hive的安装:
tar -zxvf apache-hive-0.13.1.bin.tar.gz
hive-default.xml.template–>hive-site.xml
cd hive/bin/
./hive 即可启动
修改元数据存储的关系型数据库derby:
yum -y install mysql-server
service mysqld start
cp /root/installs/conn-java.jar /home/hive/lib
grant all on *.* to root@‘%’ identified by ‘123456’;
grant all on *.* to root@‘node1’ identified by ‘123456’;
create database hive;
vi hive-site.xml:
jdbc:mysql://node1/hive
com.mysql.jdbc.Driver
root
123456
启动: ./hive
#虽然没有再hive中配置任何hadoop的东西,但是在hadoop会自动在hdfs创建/usr/hive/warehouse/t_emp/目录,
#目录下面有emp.txt,hive上的数据最终还是在hdfs上(因为配置了hadoop的环境变量)
#hive的表名就是一个文件夹,分区就是在表名文件夹下再按分区名建文件夹
load data local inpath ‘/root/emp.txt’ into table t_emp;
select count(*) from t_emp;
尽量把文件传入到hdfs上的hive目录里
hql脚本执行的方式:
1.在hive交互式命令行
2.hive -e
3.hive -f
4. 通过hive jdbc在java代码里面执行 hive解压后/lib/*.jar+hadoop的jar包
要想通过jdbc连接hive,需要把hive变成服务啊:
./hive --service hiveserver2
netstat -tunpl|grep 10000,发现是使用127.0.0。1监听的这个端口
vi hive-site.xml:
hive.server2.thrift.bind.host
localhost—>node1
hive变成服务后,可以在命令行测试是否可以连接:
./beeline
!connect jdbc:hive2://node1:10000/default
root
空密码 发现连接成功。
show tables
结果:for input string ‘5000L’,出错了:
vi hive-site.xml:
hive.server2.long.polling.timeout
5000L–>5000 改好之后就不报错了,hive配置服务成功,可以用java连接了。
habase:
tar 解压即可
hbase伪分布式搭建(不需要hadoop环境,hbase使用自己内部的zookeeper):
hbase-env.sh:
JAVA_HOME
hbase-site.xml:
hbase.rootdir
<!–/tmp/hbase/data(下面是命名空间)/default(表的父目录)/person/xxx(一个table里面有多个
region,region里面有
sotre,store分为memstore和storefile,每个store对应一个列族
)/cf1(数据小的时候,需要在hbase执行flush才看得到数据)/n个文件
hbase hfile -p -f yyyyyy(以key-value方式查看storefile) --》
file:///tmp/hbase
hbase.zookeeper.property.dataDir
/tmp/zookeeper
启动:
start-hbase.sh
hbase shell进入交互式:
help
普通:
status
whoami:root
version:hbase版本
ddl:
create ‘person’,‘cf1’,‘cf2’
list (show tables跟差不多)
describe 'person ':blocksize=>65536(64M)
put ‘person’,‘00001’,‘cf1:name’,‘zhao’ :添加
put ‘person’,‘00001’,‘cf1:sex’,‘male’
#scan全表扫描
scan ‘person’ :查看表数据
每一个单元格都有一个timestamp
#不全表扫描查询
get ‘person’,‘00001’,‘cf1:name’
#再加一条,再通过get ‘person’,‘00001’,'cf1:name’查询的时候只会得到zhao2
put ‘person’,‘00001’,‘cf1:name’,‘zhao2’
删除表:
disable ‘tb1’
drop ‘tb1’
表空间:
list_namespace
default
hbase(类似mysql里面的mysql数据库)
dml:
put get scan
tools:
flush ‘person’:把memstore里面的数据写入到stroefile
hbase的web管理界面
http://node112:60010
hbase完全分布式:
hbase-env.sh:
JAVA_HOME
export HBASE_MANAGES_ZK=false (使用自己的zk集群)
hbase-site.xml:
hbase.rootdir
<!–目录会自己创建-》
hdfs://mycluster/hbase
hbase.cluster.distributed
true
hbase.zookeeper.quorum
node112,node113,node1124
hbase.zookeeper.property.dataDir
zookeeper集群的数据目录
vi regionservers:
node2
node3
node4
vi backup-masters(自己创建):
node1
把hadoop的etc/hadoop/ hdfs-site.xml拷贝到hbase的conf目录下
跟hadoop一样,在所有安装hbase的机器上把配置文件拷贝过去
在master上启动一下hbase,hadoop先启动(zk先启动):
start-hbase.sh
jps:hmaster hregionserver(又叫server)
kill -9 node5 HMaster
发现node1变为master了
-------------------------------------------------------------------
单独启动namenode:
sbin/hadoop-daemon.sh??start/stop?namenode
单独启动datanode:
sbin/hadoop-daemon.sh??start/stop?datanode
单独启动resourcemanager:
sbin/yarn-daemon.sh??start/stop?resourcemanager
单独启动nodemanager:
sbin/yarn-daemon.sh??start/stop?nodemanager
在hdfs上创建文件夹:
hadoop?fs??-mkdir?-p?/user/roadjava/inputs?,当然hadoop?fs也可以换成hdfs?fs
递归查看hdfs上的文件名(跟在默认的50070web界面上看类似):
hadoop?fs??-ls?-R?/
查看hdfs上文件的内容:
haddop?fs?-cat??/user/roadjava/out/part_r_0000
删除/user/roadjava以及其子目录:
hadoop?fs?-rmr?/user/roadjava
往hdfs上传文件:
hadoop?fs?-put?/usr/local/test.txt?/user/roadjava/input/
上传到hdfs上之后,hdfs自然也是存储在我们的硬盘上,那么这个路径是什么呢?类似:
[root@node113?subdir0]$?pwd
/opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-938951106-192.168.10.107-1495462844069/current/
finalized/subdir0/subdir0
查看一下有什么文件呢?
-rw-rw-r--.?1?atguigu?atguigu?134217728?5月??23?16:01?blk_1073741836
-rw-rw-r--.?1?atguigu?atguigu???1048583?5月??23?16:01?blk_1073741836_1012.meta
-rw-rw-r--.?1?atguigu?atguigu??63439959?5月??23?16:01?blk_1073741837
-rw-rw-r--.?1?atguigu?atguigu????495635?5月??23?16:01?blk_1073741837_1013.meta
如果一个文件超过了默认的128M,会被分成多个,我们使用cat看其中一个就会是乱码,这时候如果想使用cat命令查看,可以自己拼接某个文件的多个块。
[root@node113?subdir0]$?cat?blk_1073741836>>tmp.file
[root@node113?subdir0]$?cat?blk_1073741837>>tmp.file
[root@node113?subdir0]$?tar?-zxvf?tmp.file
hadoop 1.x上没有yarn,2.x才有了yarn。
hadoop的配置文件
Hadoop配置文件分两类:默认配置文件(在hadoop的jar包里面)和自定义配置文件(/etc/hadoop/xx.xml),只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。
默认的配置文件:
[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.2.jar/?yarn-default.xml
[core-default.xml]
hadoop-mapreduce-client-core-2.7.2.jar/?core-default.xml
对应的、优先级更高的自定义配置文件:
存放在$HADOOP_HOME/etc/hadoop的
core-site.xml
hdfs-site.xml
yarn-site.xml
mapred-site.xml
hadoop启动方式总结
1)各个服务组件逐一启动(新增/减少节点时使用)
(1)分别启动hdfs组件
hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode
(2)启动yarn
yarn-daemon.sh start|stop resourcemanager|nodemanager
2)各个模块分开启动(配置ssh是前提)常用
(1)整体启动/停止hdfs
start-dfs.sh
stop-dfs.sh
(2)整体启动/停止yarn
start-yarn.sh
stop-yarn.sh
3)全部启动(不建议使用)
start-all.sh
stop-all.sh
-----hdfs命令行操作hadoop fs 使用总结-----
1)基本语法
bin/hadoop fs 具体命令
(1)-help:输出这个命令参数
bin/hdfs dfs -help rm
(2)-ls: 显示目录信息
hadoop fs -ls /
(3)-mkdir:在hdfs上创建目录
hadoop fs -mkdir -p /aaa/bbb/cc/dd
(4)-moveFromLocal从本地剪切粘贴到hdfs
hadoop fs - moveFromLocal /home/hadoop/a.txt /aaa/bbb/cc/dd
(5)-moveToLocal:从hdfs剪切粘贴到本地
hadoop fs - moveToLocal /aaa/bbb/cc/dd /home/hadoop/a.txt
(6)–appendToFile :追加一个文件到已经存在的文件末尾
hadoop fs -appendToFile ./hello.txt /hello.txt
(7)-cat :显示文件内容
(8)-tail:显示一个文件的末尾
hadoop fs -tail /weblog/access_log.1
(9)-text:以字符形式打印一个文件的内容
hadoop fs -text /weblog/access_log.1
(10)-chgrp 、-chmod、-chown:linux文件系统中的用法一样,修改文件所属权限
hadoop fs -chmod 666 /hello.txt
hadoop fs -chown someuser:somegrp /hello.txt
(11)-copyFromLocal:从本地文件系统中拷贝文件到hdfs路径去
hadoop fs -copyFromLocal ./jdk.tar.gz /aaa/
(12)-copyToLocal:从hdfs拷贝到本地
hadoop fs -copyToLocal /aaa/jdk.tar.gz
(13)-cp :从hdfs的一个路径拷贝到hdfs的另一个路径
hadoop fs -cp /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2
(14)-mv:在hdfs目录中移动文件
hadoop fs -mv /aaa/jdk.tar.gz /
(15)-get:等同于copyToLocal,就是从hdfs下载文件到本地
hadoop fs -get /aaa/jdk.tar.gz
(16)-getmerge :合并下载多个文件,比如hdfs的目录 /aaa/下有多个文件:log.1, log.2,log.3,…
hadoop fs -getmerge /aaa/log.* ./log.sum
(17)-put:等同于copyFromLocal
hadoop fs -put /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2
(18)-rm:删除文件或文件夹
hadoop fs -rm -r /aaa/bbb/
(19)-rmdir:删除空目录
hadoop fs -rmdir /aaa/bbb/ccc
(20)-df :统计文件系统的可用空间信息
hadoop fs -df -h /
(21)-du统计文件夹的大小信息
hadoop fs -du -s -h /aaa/*
(22)-count:统计一个指定目录下的文件节点数量
hadoop fs -count /aaa/
(23)-setrep:设置hdfs中文件的副本数量
hadoop fs -setrep 3 /aaa/jdk.tar.gz
注意:

这里设置的副本数只是记录在namenode的元数据中,是否真的会有这么多副本,还得看datanode的数量。因为目前只有3台设备,最多也就3个副本,只有节点数的增加到10台时,副本数才能达到10。