一个菜鸡的学习、找工作的学习过程
自我学习使用
前言
本人是一个以后想找大数据开发岗的菜鸡
在网上广泛的寻找相关工作资料后不难发现,公司常常需要我们有以下技能:
1.扎实的SQL基础,熟练掌握Hive SQL;
2.熟悉Linux/Unix平台上的Python、Java语言编程,熟悉常用的脚本语言;
3.熟悉大数据编程技术包括但不限于:Hadoop、Hive、Spark等;
(我想应当还有:HDFS、Yarn、MapReudece、HBase、Kafka、Flume、Redis、Sqoop);
4.熟悉数据仓库理论方法及ETL相关技术;
5.熟悉常用数据结构与算法;
6.具有机器学习和数据挖掘领域的理论背景和实战经验者优先;
提示:下面是一些学习后的总结资料供自己和大家参考
一、熟悉常用的脚本语言(以shell作为学习展开)
Presentation
你对脚本语言有什么了解?
自我总结:我对脚本的理解,他可以理解为一个命令行的集合,将命令行的集合写在一个文件中。
1.1shell概述
Shell是一个命令行解释器,它接受应用程序/用户命令,然后调用操作系统内核。
Shell还是一个功能相当强大的编程语言,易编写、易调试、灵活性强。
补充(shell概念补充及linux的发行本):
(1)Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本,常见的脚本解释器有:
bash:是Linux标准默认的shell。bash由Brian Fox和Chet Ramey共同完成,
是BourneAgain Shell的缩写,内部命令一共有40个。
sh: 由Steve Bourne开发,是Bourne Shell的缩写,sh 是Unix 标准默认的shell。
(2)linux发行的主要三大版本:
--Debian系列:Ubuntu、Knopix;
--Slackware系列:Suse、Opensuse;
--Redhat系列:Centos、Fedora;
1.2shell解析器
(1)Linux提供的Shell解析器有:
[atguigu@hadoop101 ~]$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
(2)bash和sh的关系:
[atguigu@hadoop101 bin]$ ll | grep bash
-rwxr-xr-x. 1 root root 941880 5月 11 2016 bash
lrwxrwxrwx. 1 root root 4 5月 27 2017 sh -> bash
补充(->的含义):
(1)->:在linux命令中是软链接的意思,放在windows里就是快捷键的意思,
则sh -> bash,表示bash向下兼容sh,sh是bash的快捷方式,sh已经是历史的残渣,一般用bash;
(3)Centos默认的解析器是bash:
[atguigu@hadoop102 bin]$ echo $SHELL
/bin/bash
补充(ubuntu的默认解释器是dash):
(1)在ubuntu中敲echo $SHELL,出来/bin/dash,表示ubuntu的默认解释器是dash;
1.3shell脚本入门
(1)脚本的概念
简单理解:将多条命令命令写进一个文件里面,这行文件就叫做脚本,即命令行的集合。
(2)创建并运用
vim a.sh
在a.sh中输入如下内容
#!/bin/bash
mkdir a
cd a
touch b
运行脚本:
bash a.sh
补充(脚本内容含义):
(1)bash a.sh实际上是a.sh脚本作为参数传给了/bin/bash
(2)#!/bin/bash第一行指明脚本解释器
脚本helloworld案例
touch helloworld.sh
vi helloworld.sh
在helloworld.sh中输入如下内容
#!/bin/bash
echo "helloworld"
运行脚本:
bash helloworld.sh
显示:
helloworld
(3)脚本的常用执行方式
(1)第一种:bash helloworld.sh
(2)第二种:直接执行./helloworld.sh
区别:
-第一种执行方式告诉了解析器是bash,只需要bash有执行权限,
所以脚本helloworld.sh里面的第一行,#!/bin/bash是一行注释;
-第二种执行方式没有告诉我们解析器,需要脚本helloworld本身有执行权限
所以脚本helloworld.sh里面的第一行,#!/bin/bash不是一行注释。
补充1(linux中的权限):
(1)文件类型:d代表目录文件、-代表文件、l代表软链接;
(2)属主权限:chmod u-x helloworld.sh 表示属主不能执行该文件;
(3)属组权限:chmod g+w helloworld.sh 表示属组可以写该文件;
(4)其他用户权限:chmod o-r helloworld.sh 表示其他用户不可以读该文件;
chmod 777 helloworld.sh 表示r=4、w=2、x=1、rwx=4+2+1=7
补充2(解释器改成python的演示):
which python
/usr/bin/python
在helloworld.sh中输入如下内容
#!/usr/bin/python
print("helloworld")
运行脚本:
./helloworld.sh
显示:
helloworld
1.4shell中的变量
(1)系统预定义的变量
[chris@hadoop100 ~]$ echo $USER
chris
[chris@hadoop100 ~]$ echo $HOME
/home/chris
[chris@hadoop100 ~]$ echo $PWD
/home/chris
[chris@hadoop100 ~]$ echo $SHELL
/bin/bash
(2)变量的定义、输出、撤销、静态变量
(1)定义变量:变量=值
(2)撤销变量:unset 变量
(3)声明静态变量:readonly变量,注意:不能unset
[chris@hadoop100 ~]$ i=0
[chris@hadoop100 ~]$ echo $SHELL
/bin/bash
[chris@hadoop100 ~]$ echo $i
0
[chris@hadoop100 ~]$ a=1
[chris@hadoop100 ~]$ b=2
[chris@hadoop100 ~]$ echo $a+$b
1+2
[chris@hadoop100 ~]$ unset i;
[chris@hadoop100 ~]$ echo $i
[chris@hadoop100 ~]$ readonly i=5
[chris@hadoop100 ~]$ echo $i
5
[chris@hadoop100 ~]$ i=6
-bash: i: readonly variable
[chris@hadoop100 ~]$ unset i
-bash: unset: i: cannot unset: readonly variable
补充(查看Linux的进程):
ps -ef
(3)特殊变量
$n、$#、$*、$@、$?
(1)$n:n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数,
十以上的参数需要用大括号包含,如${10}
(2)$#:获取所有输入参数个数,常用于循环。
(3)$*、$@:$*这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体,
$@这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待。
(4)$?:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;
如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。
[atguigu@hadoop101 datas]$ touch parameter.sh
[atguigu@hadoop101 datas]$ vim parameter.sh
在parameter.sh中输入如下内容
#!/bin/bash
echo $1 $2 $3
echo '$#'=$#
echo '$*'=$*
echo '$@'=$@
运行脚本:
./parameter.sh aaa bbb ccc ddd
显示:
aaa bbb ccc
$#=4
$*=aaa bbb ccc ddd
$@=aaa bbb ccc ddd
echo $?
0
1.5运算符
(1)运算式
“$((运算式))”或“$[运算式]”
[chris@hadoop100 ~]$ a=5
[chris@hadoop100 ~]$ b=5
[chris@hadoop100 ~]$ echo $[$a+$b]
10
[chris@hadoop100 ~]$ echo $(($a+$b))
10
(2) 加,减,乘,除,取余
注意:expr运算符间要有空格
expr + , - , \*, /, % 加,减,乘,除,取余
[chris@hadoop100 ~]$ expr $a + $b
10
1.6条件判断
(1)基本语法