文章目录
Linux
双网卡配置
vi /etc/sysconfig/network-scripts/ifcfg-eth0 #配置网卡/更改IP
rm -rf /etc/udev/rules.d/70-persistent-net.rules #删除MAC地址
service network restart #重启网络
service iptables stop #关闭防火墙(centos6)
systemctl stop firewalld #关闭防火墙(centos7)
chkconfig iptables off # 关闭防火墙自启(centos6)
systemctl disable firewalld #关闭防火墙自启(centos7)
ifconfig # 查看网络信息(centos6)
ip addr # 查看网络信息(centos7)
vi /etc/hosts # 主机名和IP的映射
vi /etc/sysconfig/network #配置主机名与IP的映射关系
NETWORKING=yes
HOSTNAME=HadoopNode00
vi /etc/sysconfig/network #更改主机名
192.168.11.20 HadoopNode00
#ssh免密登陆
ssh-keygen -t rsa # 生成密钥
ssh-copy-id HadoopNOde00
网卡一
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.134.99
NETMASK=255.255.255.0
BROADCAST=192.168.134.255
#解释:
#网卡1使用NAT模式
#静态IP
#网段与自身虚拟机配置保持一致 即可
#作为虚拟机之前通信使用
网卡二
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=dhcp
#解释:
#网卡1使用桥接模式
#动态IP
#作为连接公网使用
同步时钟
ntpdate -u ntp.api.bz
查询进程
ps -ef |grep 进程名
ps:将某个进程显示出来
-A 显示所有程序。
-e 此参数的效果和指定"A"参数相同。
-f 显示UID,PPIP,C与STIME栏位。
grep命令是查找
中间的|是管道命令 是指ps命令与grep同时执行
杀死进程
kill -9 UID
Hadoop
#格式化namenode
hdfs namenode -format
#启动hdfs
start-dfs.sh # 开启HDFS
stop-dfs.sh # 关闭hdfs
#上传文件
hadoop fs -put /root/install.log /1.txt
#ls文件
hadoop fs -ls /
#下载文件
hadoop fs -get /1.txt /root/1.txt
#删除文件
hadoop fs -rm /2.txt
#删除文件夹
hadoop fs -rm -r -f /data
#查看文件
hadoop fs -cat /1.txt
#创建文件夹
hadoop fs -mkdir /data
#复制文件
hadoop fs -cp /1.txt /data/
#启动YARN
start-yarn.sh
#远程Jar 包部署
hadoop jar jar包名 Job全限定名
Zookeeper
#启动
./bin/zkServer.sh start ./conf/zk.conf
#状态查看
./bin/zkServer.sh status ./conf/zk.conf
#连接
./bin/zkCli.sh -server 192.168.15.130:2181
#其他指令
connect host:port
get path [watch]
ls path [watch]
set path data [version]
rmr path
quit
printwatches on|off
create [-s] [-e] path data acl 默认持久节点 -s 顺序节点 -e 临时节点
stat path [watch]
close
ls2 path [watch]
history
setAcl path acl
getAcl path
addauth scheme auth
delete path [version]
#connect (链接ZooKeeper)
connect localhost:2181
#ls / ls2 (查看子节点)
[zk: localhost:2181(CONNECTED) 19] ls /
[dubbo, hadoop-ha, zookeeper]
[zk: localhost:2181(CONNECTED) 20] ls2 /
[dubbo, hadoop-ha, zookeeper]
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x1001
cversion = 4
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 4
#create(创建节点)
[zk: localhost:2181(CONNECTED) 15] create /test'1'
Created /test
#delete(删除节点)
[zk: localhost:2181(CONNECTED) 21] delete /test
[zk: localhost:2181(CONNECTED) 22] ls /
[dubbo, hadoop-ha, zookeeper]
#rmr (递归删除节点)
[zk: localhost:2181(CONNECTED) 28] ls /test
[cjh]
[zk: localhost:2181(CONNECTED) 44] rmr /test/cjh
[zk: localhost:2181(CONNECTED) 46] ls /test
[]
#quit(退出ZookeeperSHell客户端)
quit
#stat(查看节点状态)
[zk: localhost:2181(CONNECTED) 51] stat /test
cZxid = 0x1004
ctime = Tue Mar 12 15:28:00 CST 2019
mZxid = 0x1004
mtime = Tue Mar 12 15:28:00 CST 2019
pZxid = 0x100f
cversion = 10
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 1
numChildren = 0
HBase
单机
启动
start-hbase.sh
连接
hbase shell
Shell操作
status #查看HBase状态
version #查看版本
whoami
命名空间(namespace类似RDBMS的数据库)操作
create_namespace "cjh" #创建一个普通的命名空间
create_namespace "cjh",{'name'=>'666'} #创建带属性的命名空间
drop_namespace 'baizhi' #删除命名空间
describe_namespace 'shahe' # 描述命名空间
alter_namespace 'cjh',{METHOD => 'set', 'name'=>'777'} # 修改命名空间
list_namespace # 列出所有命名空间
表操作(DDL数据定义语言)
create 'cjh:t_user','cf1','cf2' # 创建cjh namespace的下的表叫做 t_user,有两个列簇叫做 cf1 cf2
# 创建一个最多有三个版本的表
create 'cjh:t_user',{NAME=>'cf1',VERSIONS=>3}
describe 'cjh:t_user' #描述表
#删除表,不可以直接删除,要先禁用
disable 'cjh:t_user'
drop 'cjh:t_user'
list #列出所有表
list_namespace_tables 'cjh' # 列出某个命名空间下的表
数据操作(数据管理语言 DML)
#put
put 'cjh:t_user','1','cf1:name','zhangsan' # 最普通的插入语句的方式
t = get_table 'cjh:t_user' # 将表对象复制给变量t
# 使用复制对象t 对表进行操作
t.put '1','cf1:age',18
# 覆盖操作和put插入相似 写入相同的条件 写入值就可覆盖
t.put '1','cf1:age',19
# 扫描 当前的表
t.scan
#get
# 获取cjh:t_user 下的rowk为1 的所有的cell
get 'cjh:t_user' ,'1'
t.get '1'
#获取某一值的不同版本的数据
t.get '1',{COLUMN=>'cf1:name',VERSIONS=>3}
#delete /deleteall
t.delete '1','cf1:name'
# 根据时间戳进行删除
t.delete '1','cf1:age',1569279066158
#删除所有
deleteall 'cjh:t_user','1'
#scan
# 查询列簇为cf1 从第一行开始
scan 'cjh:t_user',{COLUMNS=>['cf1'],STARTROW=>'1'}
# 查询列簇为cf1 从第一行开始 只显示一行
scan 'cjh:t_user',{COLUMNS=>['cf1'],STARTROW=>'1',LIMIT=>1}
#count 查询表中数据条数
count 'cjh:t_user'
#append在指定值上追加数据
append 'cjh:t_user','1','cf1:name','666'
#truncate(删除)(执行之前买好飞机票)
truncate 'cjh:t_user'
Hive
#启动
./bin/hive
#查看当前数据库
select current_database();
#展示所有数据库
show databases;
#显示所有表
show tables;
#直接查询
./bin/hive -e 'select * from t_user'
#服务启动-JDBC
./bin/hiveserver2 #启动hive服务,挂起
#以cloudera-scm 的身份 以jdbc 的方式连接远程的 hiveserver2
./bin/beeline -u jdbc:hive2://$HOSTNAME:10000 -n root
Hive表操作
#创建表
create table t_user(
id int,
name string,
sex boolean,
birthDay date,
salary double,
hobbies array<string>,
card map<string,string>,
address struct<country:string,city:string>
)
#将数据导入到表中(写好数据格式)
#不常用
[root@centos ~]# hdfs dfs -put t_user /user/hive/warehouse/cjh.db/t_user
#使用hive加载数据(先进入hive命令行)
0: jdbc:hive2://CentOS:10000> load data local inpath '/root/t_user_c' overwrite into table t_user_c;
#'local'表示本地加载信息,‘overwrite’:表示数据覆盖。
#自定义分隔符
create table t_user_c(
id int,
name string,
sex boolean,
age int,
salary double,
hobbies array<string>,
card map<string,string>,
address struct<country:string,city:string>
)
row format delimited fields terminated by ','
collection items terminated by '|'
map keys terminated by '>'
lines terminated by '\n';
#CSV格式文件
CREATE TABLE t_csv(
id int,
name string,
sex boolean,
age int
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
"separatorChar" = ",",
"escapeChar" = "\\"
);
#JSON格式数据
create table t_user_json(
id int,
name varchar(32),
sex boolean,
birth date
)ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe';
#数据导入(管理员)
#x新建表
0: jdbc:hive2://CentOS:10000> create table t(id string ,name string);
#批量插入
0: jdbc:hive2://CentOS:10000> INSERT into t(id,name) values(1,'zs'),(2,'ww');
#复制表
0: jdbc:hive2://CentOS:10000> insert into table t select ip,last_time from t_access;
#复制表结构
0: jdbc:hive2://CentOS:10000> create table temp1 as select ip,last_time from t_access;
Hive SQL操作
#使用正则表达式
#需要设置如下属性才能使用 注意 在Hive编程指南中没有对此问题作出解答
set hive.support.quoted.identifiers=none;
select userid, `.*string` from logs;
#注意次引号为 反单引号 (ESC那个!)
#limit限制返回数据条数
select * from testuser limit 2;
#where条件查询
select * from testuser where id = '1' ;
#group by分组
#根据性别进行分组查询每个性别的平均工资
select sex , avg(salary) as avgSalary from testuser group by sex;
#join
#内连
#使用内连接,查询性别不同但是工资相同的人
select a.sex, a.name, a.salary , b.sex , b.name,b.salary from testuser a join testuser b on a.salary = b.salary where a.sex = false and b.sex = true;
#三表连接
#使用内连接,查询来自三个不同城市的人且具有相同的第二种爱好
select
a.address.city , a.name as name , a.hobbies[1] as hobby ,
b.address.city , b.name as name ,b.hobbies[1] as hobby ,
c.address.city , c.name as name ,c.hobbies[1] as hobby
from testuser a
join testuser b on a.hobbies[1] = b.hobbies[1]
join testuser c on a.hobbies[1] = c.hobbies[1]
where a.address.city = 'bj' and b.address.city = 'sh' and c.address.city = 'ly';
#LEFT OUTER JOIN 左外连接(左链接,显示关键词left左边表中的所有数据,右边表数据数据少了补NULL值,数据多了不显示;)
#连接部门表查询员工来自哪个部门
select a.name ,b.depname from testemp a left join testdep b on a.depid = b.id;
#FULL OUTER JOIN 全连接|满外连接
#RIGHT OUTER JOIN 右外连接(左表中匹配不上的字段值用NULL代替。)
select a.name ,b.depname from testemp a right join testdep b on a.depid = b.id;
#笛卡尔积JOIN(将左表每条数据与右表每条数据分别相连)
#不带条件
SELECT * FROM testemp , testdep;
#带条件
SELECT * FROM testemp a ,testdep b where a.depid = b.id;
#排序 ORDER BY | SORT BY|CLUSTER BY
#order by
#在这里叫全局排序,也就是一个MR程序中,升序的关键字ASC,默认升序。DESC为降序。 ORDER BY 子句在SELECT语句的结尾。
#按照工资就行降序排序(默认升序asc,可以不写)
select * from testuser order by salary desc;
#SORT BY
#每个MapReduce内部进行排序,对全局结果集来说不是排序,但是对于Reduce=1的情况是无法体现和ORDER BY的区别
#设置Reduce个数
set mapreduce.job.reduces=2;
#查看Reduce个数
get mapreduce.job.reduces;
#按工资升序查询
select * from testuser sort by salary;
#Distribute By
#Distribute By:类似MR中partition,进行分区,结合sort by使用。
#注意,Hive要求DISTRIBUTE BY语句要写在SORT BY语句之前。
select * from logs distribute by dateString sort by timeString;
#Cluster By
#当distribute by和sorts by字段相同时,可以使用cluster by方式。cluster by除了具
#有distribute by的功能外还兼具sort by的功能。但是排序只能是倒序排序,不能指定排
#序规则为ASC或者DESC。
select * from logs cluster by timeString;
select * from logs distribute by timeString sort by timeString;
#上述两种写的方式是相同的
#抽样
#Hive提供了另外一种按照百分比进行抽样的方式,这种事基于行数的,按照输入路径下的数
#据块百分比进行的抽样。
select * from testuser tablesample(0.1 percent);
#提示:这种抽样方式不一定适用于所有的文件格式。另外,这种抽样的最小抽样单元是一个HDFS数据块。因此,如果表的数据大小小于普通的块大小128M的话,那么将会返回所有行。
#分桶
#分区针对的是数据的存储路径;分桶针对的是数据文件。分区提供一个隔离数据和优化查询的
#便利方式。不过,并非所有的数据集都可形成合理的分区,特别是之前所提到过的要确定合适
#的划分大小这个疑虑。分桶是将数据集分解成更容易管理的若干部分的另一个技术。
#创建表
create table
logs_buck
(
uuid string,
userid string ,
fromUrl string ,
dateString string,
timeString string,
ipAddress string,
browserName string,
pcSystemNameOrmobileBrandName string ,
systemVersion string,
language string,
cityName string
)
clustered by(uuid)
into 3 buckets row format delimited fields terminated by ' ';
set hive.enforce.bucketing = true;#启用桶表
load data local inpath '/root/realclean.log' overwrite into table logs_buck;
#我们看到虽然设置了强制分桶,但实际student表下面只有一个logs一个文件。分桶也就是分
#区,分区数量等于文件数,所以上面方法并没有分桶。
##创建一个新表
create table
logs_buck1
(
uuid string,
userid string ,
fromUrl string ,
dateString string,
timeString string,
ipAddress string,
browserName string,
pcSystemNameOrmobileBrandName string ,
systemVersion string,
language string,
cityName string
)
clustered by(uuid)
into 3 buckets row format delimited fields terminated by ' ';
#这是我们这是的是3个桶
#所以设置一下reducetask的个数
set mapreduce.job.reduces=3;
insert into table logs_buck1 select * from logs_buck distribute by(timeString) sort by(timeString asc);
Hive函数
#查询系统现在已经存在函数
show functions;
#显示自带函数用法
desc function upper;
#详细显示自带函数用法
desc function extended upper
Flume
启动Flume Agent服务实例(加载配置)
[root@HadoopNode00 apache-flume-1.7.0-bin]# bin/flume-ng agent --conf conf --conf-file conf/simple.properties --name a1 -Dflume.root.logger=INFO,console
读取指定文件
[root@Spark apache-flume-1.7.0-bin]# ./bin/flume-ng avro-client --host hadoopnode01 --port 44444 --filename /root/a.txt
Kafka
启动
[root@HadoopNode0* kafka_2.11-2.2.0]# bin/kafka-server-start.sh -daemon config/server.properties
关闭
[root@HadoopNode0* kafka_2.11-2.2.0]# bin/kafka-server-stop.sh config/server.properties
新建Topic
[root@HadoopNode01 kafka_2.11-2.2.0]# bin/kafka-topics.sh --bootstrap-server HadoopNode01:9092,HadoopNode02:9092,HadoopNode03:9092 --topic t1 --partitions 3 --replication-factor 3 --create
展示Topic列表
[root@HadoopNode01 kafka_2.11-2.2.0]# bin/kafka-topics.sh --bootstrap-server HadoopNode01:9092,HadoopNode02:9092,HadoopNode03:9092 --list
删除Topic
[root@HadoopNode02 kafka_2.11-2.2.0]# bin/kafka-topics.sh --bootstrap-server HadoopNode01:9092,HadoopNode02:9092,HadoopNode03:9092 --delete --topic t2
描述Topic
[root@HadoopNode02 kafka_2.11-2.2.0]# bin/kafka-topics.sh --bootstrap-server HadoopNode01:9092,HadoopNode02:9092,HadoopNode03:9092 --describe --topic t1
修改Topic
[root@HadoopNode02 kafka_2.11-2.2.0]# bin/kafka-topics.sh --bootstrap-server HadoopNode01:9092,HadoopNode02:9092,HadoopNode03:9092 --alter --topic t1 --partitions 5
发布消息
[root@HadoopNode01 kafka_2.11-2.2.0]# bin/kafka-console-producer.sh --broker-list HadoopNode01:9092,HadoopNode02:9092,HadoopNode03:9092 --topic t1
订阅消息
[root@HadoopNode02 kafka_2.11-2.2.0]# bin/kafka-console-consumer.sh --topic t1 --bootstrap-server HadoopNode01:9092,HadoopNode02:9092,HadoopNode03:9092
生产者的批量发送
# 生产者方 添加如下配置项即可
# 两个条件 满足其一即可
batch.size = 16384Bytes 16kb// 缓冲区大小
linger.ms = 毫秒值 // 缓冲区中数据的驻留时长
Kafka Streaming
生产者
[root@HadoopNode01 kafka_2.11-2.2.0]# bin/kafka-console-producer.sh --topic t8 --broker-list HadoopNode01:9092,HadoopNode02:9092,HadoopNode03:9092
消费者
bin/kafka-console-consumer.sh --bootstrap-server HadoopNode01:9092,HadoopNode02:9092,HadoopNode03:9092 \
--topic t9 \
--from-beginning \
--formatter kafka.tools.DefaultMessageFormatter \
--property print.key=true \
--property print.value=true \
--property key.deserializer=org.apache.kafka.common.serialization.StringDeserializer \
--property value.deserializer=org.apache.kafka.common.serialization.LongDeserializer
Spark
Standalone(独立模式)
启动
[root@Spark spark-2.4.4]# sbin/start-all.sh
Spark shell 命令窗口
[root@Spark spark-2.4.4]# bin/spark-shell --master spark://Spark:7077 --total-executor-cores 2
Spark On Yarn
启动
[root@SparkOnYarn spark-2.4.4]# bin/spark-shell --master yarn --executor-cores 2 --num-executors 2
jar包执行
[root@SparkOnYarn spark-2.4.4]# bin/spark-submit --master yarn --class com.baizhi.WordCountApplication3 --executor-cores 2 --num-executors 1 /root/spark-day1-1.0-SNAPSHOT.jar
Flink
启动
[root@Spark ~]# ./bin/start-cluster.sh
本地jar包执行
[root@Spark flink-1.8.1]# ./bin/flink run -c com.baizhi.quickstart.FlinkWordCountsQuickStart -p 3 /root/flink-1.0-SNAPSHOT-jar-with-dependencies.jar
查看已运行flink的进程
[root@Spark flink-1.8.1]# ./bin/flink list -m Spark:8081
取消flink进程
[root@Spark flink-1.8.1]# ./bin/flink cancel -m Spark:8081 36e8f1ec3173ccc2c5e1296d1564da87
取消任务,并将状态保存在默认配置的savepoints中
[root@Spark bin]# ./flink cancel -m spark:8081 -s 62e06a69c34d24036c0f09db368dc77d