定时任务
crontab -e * * * * * 分 时 日 月 周 分:每小时的第几分 时:每天的第几时 0-24 日:每月的几号 月:每年的哪月 周:每周的第几天 * * * * * 代表每分钟 1 * * * * 每小时的01分执行 1 14 * * * 每天的14点01分执行 1 14 1 * * 每月1号的14点01分执行 1 14 2 7 * 每年7月2号的14点01分执行 1 14 * 7 2 每年7月的每周的第2天 14点01分执行 每周二至周五,下午6点 的计划任务 0 18 * * 2-5 (2,3,4,5) 1到10月份,每周二周五,下午6点的计划任务 0 18 * 1-10 2,5 12点和14点,检查apache服务是否启动 每年的1-3月7-9月 周一到周5 0 12,14 * 1-3,7-9 1-5 cat /var/spool/cron/root 查看错误信息
高级文本编辑工具
cut
cut -d 指定切割方式 -f 第几列 文件名 vi cut.txt 001 liuyan 38 nv 002 tangyan 18 nv 003 jinlian 138 nv 004 dalang 8 nan cut -d " " -f 1 cut.txt 按照" "来切 显示第一列 001 002 003 004 cut -d " " -f 2,3 cut.txt 按照" "来切 显示2 3列 liuyan 38 tangyan 18 jinlian 138 dalang 8 #获取到柳岩的id cat cut.txt | grep liuyan 001 liuyan 38 nv cat cut.txt | grep liuyan | cut -d " " -f 1 001 echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/apps/jdk1.8.0_191/bin:/root/bin 选取系统PATH变量值,第2个“:”开始后的所有路径: echo $PATH | cut -d ":" -f 2- ifconfig ens33 | grep "inet "| cut -d "i" -f 2-|cut -d " " -f2
sed
sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出
sed [选项参数] ‘command’ filename vi sed.txt 001 liuyan 38 nv 002 tangyan 18 nv 003 jinlian 138 nv 004 dalang 8 nan #显示的时候在第二行后插入 003 ximenqing 100 nan a 新增,a的后面可以接字串,在下一行出现 sed '2a 003 ximenqing 100 nan' sed.txt #删除包含001的记录 d 删除 sed '/001/d' sed.txt 查找替换 sed 's/要被取代的字串/新的字串/g' 文件名 #将所有00 替换成 "" sed 's/nv/女/g' sed.txt sed 's/0//g' sed.txt # 删除第二行 并将所有00 替换成"" -e同时执行多个指令 sed -e '2d' -e 's/0//g' sed.txt #显示时去除空行 sed '/^$/d' sed.txt #修改文件 -i 删除文件中所有空行 sed -i '/^$/d' sed.txt #给指定1-3行范围添加注释 sed -i '1,3s/^/#/g' sed.txt #将所有的注释删除 sed -i 's/^#//g' sed.txt #在001开头这一行下 加入 002 sed -i '/^001/a\002' sed.txt #在001开头这一行 上面 加入 0000 sed -i '/^001/i\0000' sed.txt 每一行之间都必须要以反斜杠 \ 来进行新行标记 a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行) i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
awk
一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。
awk [选项参数] ‘pattern1{action1} pattern2{action2}...’ filename pattern:表示AWK在数据中查找的内容,就是匹配模式 action:在找到匹配内容时所执行的一系列命令 -F 指定输入文件折分隔符 -v 赋值一个用户定义变量 vi awk.txt 001 liuyan 38 nv 002 tangyan 18 nv 003 jinlian 138 nv 004 dalang 8 nan #以空格进行切割 查找以001开头的所有行 打印第2列 awk -F " " '/^001/{print $2}' awk.txt #以空格进行切割 查找以001开头的所有行 打印第2列 第3列 用,分隔 awk -F " " '/^001/{print $2 "," $3}' awk.txt #在查找的内容之前打印 hello 在结尾打印 world awk -F " " 'BEGIN{print "hello"}/^001/{print $2 "," $3}END{print "world"}' awk.txt #给所有用户的年龄+10在输出 awk -F " " -v i=10 '{print $3+i}' awk.txt 内置变量 FILENAME 文件名 NR 已读的记录数 第几行 NF 浏览记录的域的个数(切割后,列的个数) 切割的列数 awk -F " " '{print FILENAME,NR,NF}' awk.txt #打印所有空行号 awk '/^$/{print NR}' awk.txt ip ifconfig ens33 | grep "inet " |awk -F " " '{print "ip地址是:"$2}'
sort
sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。
sort 参数 文件 -n 以数值的方式排序 不指定以字符串形式排序 1 11 111 2 22 -r 逆序 -t 指定分隔符 -k 指定列 vi sort.txt 001 liuyan 38 nv 002 tangyan 18 nv 003 jinlian 138 nv 004 dalang 8 nan sort -t " " -nk 3 sort.txt sort -t " " -nrk 3 sort.txt sort -t " " -nk 3 sort.txt >> 1.txt
Hadoop
大数据简介
最早提出“大数据”时代到来的是全球知名咨询公司麦肯锡,其称∶“数据,已经渗透到当今每一个行业和业务职能领域,成为重要的生产因素。人们对于海量数据的挖掘和运用,预示着新一波生产率增长和消费者盈余浪潮的到来。”
2019年,央视推出了国内首部大数据产业题材纪录片《大数据时代》,节目细致而生动地讲述了大数据技术在政府治理、民生服务、数据安全、工业转型、未来生活等方面给我们带来的改变和影响。
大数据的5v特征
一、Volume:数据量大,包括采集、存储和计算的量都非常大。大数据的起始计量单位至少是P(1000个T)、E(100万个T)或Z(10亿个T)。
二、Variety:种类和来源多样化。包括结构化、半结构化和非结构化数据,具体表现为网络日志、音频、视频、图片、地理位置信息等等,多类型的数据对数据的处理能力提出了更高的要求。
三、Value:数据价值密度相对较低,或者说是浪里淘沙却又弥足珍贵。随着互联网以及物联网的广泛应用,信息感知无处不在,信息海量,但价值密度较低,如何结合业务逻辑并通过强大的机器算法来挖掘数据价值,是大数据时代最需要解决的问题。
四、Velocity:数据增长速度快,处理速度也快,时效性要求高。比如搜索引擎要求几分钟前的新闻能够被用户查询到,个性化推荐算法尽可能要求实时完成推荐。这是大数据区别于传统数据挖掘的显著特征。
五、Veracity:数据的准确性和可信赖度,即数据的质量。
简而言之,大数据指非常庞大、复杂的数据集,特别是来自新数据源的数据集,其规模之大令传统数据处理软件束手无策,却能帮助我们解决以往非常棘手的业务难题.
应用领域
-
电商领域
精准广告定位,个性化推荐,大数据杀熟
-
传媒领域
精准营销,才你喜欢,交互推荐
-
金融领域
理财投资,通过对个人的信用评估,风险承担能力评估,集合众多理财产品、推荐响应的投资理财产品。
-
交通领域
拥堵预测、智能红绿灯、导航最优规划
-
电信领域
基站选址优化、舆情监控、客户用户画像
-
安防领域
犯罪预防、天网监控
-
医疗领域
智慧医疗、疾病预防、病源追踪
思考
大数据场景下
1.海量数据如何存储?
2.海量数据如何计算?
1.Hadoop简介
1.1 组件
Hadoop由4部分组成
1)HDFS:(Hadoop Distribute File System)分布式文件系统,海量数据存储解决方案 2)MapReduce:Hadoop的分布式运算编程框架 3)Yarn:分布式资源调度平台和任务监控平台 4)Commons: HADOOP底层技术支持
主要用来解决:大数据存储,大数据分析. 核心组件:HDFS,MapReduce
1.2 特点
(1) 高可靠性 :Hadoop底层将数据以多个副本的形式存储在不同的机器上,保证数据的安全可靠。 (2) 高扩展性 :当存储hdp集群的存储能力和运算资源不足时,可以横向的扩展机器节点来达到扩容和增强运算能力 。 (3) 高效性 :在MapReduce的思想下能够在节点之间动态地移动运算,且是分布式并行工作的,所以运海量数据非常高效。 (4) 高容错性 : Hadoop能够自动保存数据的多个副本,当有存储数据的节点宕机以后, 会自动的复制副本维持集群中副本的个数 ,并且能够自动将失败的任务重新分配。 (5) 低成本 :hadoop可以运行在廉价的机器上并行工作,达到高效,安全,效率于一身目的。
2.HDFS分布式文件系统
(Hadoop Distribute File System )分布式文件系统,解决了海量数据无法单台机器存储的问题,将海量的数据存储在不同的机器中 ,由HDFS文件系统统一管理和维护, 提供统一的访问目录和API !
安装
安装环境和整体步骤
环境 java环境 集群中的每台机器的ip 主机名 域名映射 关闭防火墙 时间同步 ssh免密 步骤 上传 解压 配置 分发 初始化 启动
安装过程
1.上传
rz 命令上传 将hadoop-3.1.1.tar.gz 上传到/opt/apps cd /opt/apps rz 上传
2.解压
tar -zxvf hadoop-3.1.1.tar.gz
bin 主要是一些可执行文件命令 etc 主要是一些Hadoop配置文件 sbin 超级命令 集群启动 share 共享目录 帮助文档
删除文档 rm -rf share/doc
3.配置
配置JavaHome 进入环境 cd opt/apps/hadoop-3.1.1/etc/hadoop/hadoop-env.sh 打开VI编辑 vi hadoop-env.sh shift + G 最后一行 o 下一行插入 export JAVA_HOME=/opt/apps/jdk1.8.0_191
配置namenode 进入环境 /opt/apps/hadoop-3.1.1/etc/hadoop/hdfs-site.xml 进入VI编辑 vi hdfs-site.xml 将复制的内容粘贴到<configuration>与</configuration>标签中间 注意 先进入到插入模式 按i 再粘贴 <!-- 集群的namenode的位置 datanode能通过这个地址注册--> <property> <name>dfs.namenode.rpc-address</name> <value>linux01:8020</value> </property> <!-- namenode存储元数据的位置 --> <property> <name>dfs.namenode.name.dir</name> <value>/opt/hdpdata/name</value> </property> <!-- datanode存储数据的位置 --> <property> <name>dfs.datanode.data.dir</name> <value>/opt/hdpdata/data</value> </property> <!-- secondary namenode机器的位置--> <property> <name>dfs.namenode.secondary.http-address</name> <value>linux02:50090</value> </property>
4.分发安装包
进入到apps文件夹中 cd /opt/apps 将hadoop文件远程复制linux02 linux03 scp -r hadoop-3.1.1 linux02:$PWD scp -r hadoop-3.1.1 linux03:$PWD
5.初始化
进入到hadoop的bin文件夹下 进行初始化 linux01 ./hadoop namenode -format 初始化后 opt下会多出一个文件夹hdpdata
6.启动
单节点启动
先启动namenode 进入到hadoop的sbin目录下 linux01 ./hadoop-daemon.sh start namenode 单个启动namenode 启动成功后可以访问页面 http://linux01:9870
启动datanode 进入到hadoop的sbin目录下 linux01 linux02 linux03 ./hadoop-daemon.sh start datanode
启动成功后页面可以看到对应节点的信息
一键启停
为了方便今后启动我们将sbin目录配置到环境变量中 vi /etc/profile export JAVA_HOME=/opt/apps/jdk1.8.0_191 export HADOOP_HOME=/opt/apps/hadoop-3.1.1 export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin 保存后 source /etc/profile
配置集群文件 hadoop的etc/hadoop/目录下workers 告知有哪些机器 vi workers linux01 linux02 linux03 修改hadoop的sbin下的 start-dfs.sh stop-dfs.sh vi start-dfs.sh 在第一行后插入 HDFS_DATANODE_USER=root HADOOP_SECURE_DN_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root vi stop-dfs.sh 在第一行后插入 HDFS_DATANODE_USER=root HADOOP_SECURE_DN_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root 配置后 可以在任意目录下 stop-dfs.sh 停止 start-dfs.sh 启动
常用客户端命令
hdfs dfs 回车 查看指令 [root@linux01 hadoop-3.1.1]# hdfs dfs Usage: hadoop fs [generic options] [-appendToFile <localsrc> ... <dst>] [-cat [-ignoreCrc] <src> ...] [-checksum <src> ...] [-chgrp [-R] GROUP PATH...] [-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...] [-chown [-R] [OWNER][:[GROUP]] PATH...] [-copyFromLocal [-f] [-p] [-l] [-d] [-t <thread count>] <localsrc> ... <dst>] [-copyToLocal [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>] [-count [-q] [-h] [-v] [-t [<storage type>]] [-u] [-x] [-e] <path> ...] [-cp [-f] [-p | -p[topax]] [-d] <src> ... <dst>] [-createSnapshot <snapshotDir> [<snapshotName>]] [-deleteSnapshot <snapshotDir> <snapshotName>] [-df [-h] [<path> ...]] [-du [-s] [-h] [-v] [-x] <path> ...] [-expunge] [-find <path> ... <expression> ...] [-get [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>] [-getfacl [-R] <path>] [-getfattr [-R] {-n name | -d} [-e en] <path>] [-getmerge [-nl] [-skip-empty-file] <src> <localdst>] [-head <file>] [-help [cmd ...]] [-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e] [<path> ...]] [-mkdir [-p] <path> ...] [-moveFromLocal <localsrc> ... <dst>] [-moveToLocal <src> <localdst>] [-mv <src> ... <dst>] [-put [-f] [-p] [-l] [-d] <localsrc> ... <dst>] [-renameSnapshot <snapshotDir> <oldName> <newName>] [-rm [-f] [-r|-R] [-skipTrash] [-safely] <src> ...] [-rmdir [--ignore-fail-on-non-empty] <dir> ...] [-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]] [-setfattr {-n name [-v value] | -x name} <path>] [-setrep [-R] [-w] <rep> <path> ...] [-stat [format] <path> ...] [-tail [-f] <file>] [-test -[defsz] <path>] [-text [-ignoreCrc] <src> ...] [-touchz <path> ...] [-truncate [-w] <length> <path> ...] [-usage [cmd ...]] 很多指令和linux相同 我们在使用时 只要前面加上hdfs dfs 即可 例如 创建文件夹 hdfs dfs -mkdir -p /aaa/bbb/ccc 但是我们发现 这样创建 只是在本机上创建了文件夹 并没有在分布式文件系统上创建 如果想在分布式文件系统上创建 hdfs dfs -mkdir -p hdfs://linux01:8020/aaa/bbb/ccc 由于默认是在本机上操作 我们如果使用指令每次都需要加上 hdfs://linux01:8020 比较麻烦 那么可以进行配置 将默认操作设置为 分布式文件系统上 修改hadoop的etc/hadoop下的文件 core-site.xml 将下面内容放入到<configuration></configuration>标签中 <property> <name>fs.defaultFS</name> <value>hdfs://linux01:8020</value> </property> 这样 我们就不需要每次都加上hdfs://linux01:8020了 hdfs dfs -mkdir -p /zs/li/ww
创建文件夹 hdfs dfs -mkdir -p /abc 创建文件 hdfs dfs -touchz /abc/a.txt 查看 hdfs dfs -ls / 本地创建文件 echo "hello" >> b.txt 将b.txt上传到 分布式文件系统上 /abc下 hdfs dfs -put 本地文件 目标目录 hdfs dfs -put b.txt /abc/ hdfs dfs -put b.txt /abc/aa.txt 上传并改名 将 /abc/aa.txt 下载到本地根目录下 hdfs dfs -get 数据源 数据目的 hdfs dfs -get /abc/aa.txt / hdfs dfs -get /abc/aa.txt /cc.txt 下载并改名 修改abc文件夹的的权限 hdfs dfs -chmod 777 /abc 删除abc文件夹的 a.txt hdfs dfs -rm -r /abc/a.txt 删除abc文件夹下的所有内容 hdfs dfs -rm -r /abc/*
节点交互原理
我们将JDK压缩上传到文件系统上 tar -zcvf my.tar.gz jdk1.8.0_191 创建一个文件夹 hdfs dfs -mkdir -p /java/se 上传 hdfs dfs -put my.tar.gz /java/se
这个文件的总大小为182.87MB 我们说HDFS会进行分块存储 每块大小默认128MB 那么这个文件存储时应该应该分为两块,一个为128MB,一个为54.87MB 文件的存储位置为 /opt/hdpdata/data/current/BP-2080298671-192.168.133.33-1638430574514/current/finalized/subdir0/subdir0 linux01 linux02 linux03 都是相同位置
酬乐天扬州初逢席上见赠
【唐】刘禹锡
巴山楚水凄凉地,二十三年弃置身。
怀旧空吟闻笛赋,到乡翻似烂柯人。
沉舟侧畔千帆过,病树前头万木春。
今日听君歌一曲,暂凭杯酒长精神。