大数据基础

一、大数据基础

1.常用linux命令

名令 效果
cd … 返回到上一级目录
cd - 回到上次的目录
ls 列表形式显示所有文件
mkdir -p 路径 创建多级目录
rm -rf 目录名称 强制递归删除文件
cp 源文件 目标文件 复制,重命名
mv 源文件 目标文件 剪切
tar -czvf 压缩包的的名字 文件或文件夹 打包
tar -xzvf 压缩包文件 【解压路径】 解压
find 路径 -name 文件名 查找文件
pwd 当前路径
cat 文件名 查看文件所有内容
more 文件名 分页查看文件
ps -ef 查看进程
kill -9 进程id 杀死进程
chmoud 数字 文件 修改文件权限
vim /etc/sysconfig/network-script/ifcfg-eth0 修改ip地址
vim /etc/hosts 修改域名映射文件
service network restart|stop|start 网络服务
service iptables restart|stop|start 防火墙服务
chkconfig iptables off 防止防火墙开机自启动
crontab -e 时钟同步

2.shell编程

2.1基本格式:

​ tital: #!/bin/bash

	#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。

​ 窗口输出文本:echo

2.2 执行脚本方式:

方式一:(./表示当前目录。直接写 hello.sh, linux系统会去PATH里寻找有没有叫 hello.sh的。)

​ 使脚本有执行权:chmod +x ./hello.sh

​ 执行脚本: ./hello.sh

方式二:(这种方式运行脚本,不需要在第一行指定解释器信息,写了也不生效)

​ /bin/sh /root/hello.sh

2.3变量:

例子:your_name=“itcast.cn”(变量与等号之间不能有空格,变量中间也不能有空格)

使用:${变量名}

2.4参数:

$n, n 代表一个数字, 1 为执行脚本的第一个参数, 2 为执行脚本的第二个参数,以此类推…… $0 表示当前脚本名称。

2.5运算:

expr:是一款表达式计算工具,使用它能完成表达式的求值操作。

例子:echo expr $a \* $b

注意:表达式和运算符之间要有空格,完整的表达式要被两个 `包含,注意不是单引号,在 Esc 键下边。乘法符号需要用\转义。

2.6判断语句:
#!/bin/bash

a=10
b=20

if [ $a -eq $b ]
then
   echo "$a -eq $b : a 等于 b"
else
   echo "$a -eq $b: a 不等于 b"
fi
if [ $a -ne $b ]
then
   echo "$a -ne $b: a 不等于 b"
else
   echo "$a -ne $b : a 等于 b"
fi
if [ $a -gt $b ]
then
   echo "$a -gt $b: a 大于 b"
else
   echo "$a -gt $b: a 不大于 b"
fi
if [ $a -lt $b ]
then
   echo "$a -lt $b: a 小于 b"
else
   echo "$a -lt $b: a 不小于 b"
fi
if [ $a -ge $b ]
then
   echo "$a -ge $b: a 大于或等于 b"
else
   echo "$a -ge $b: a 小于 b"
fi
if [ $a -le $b ]
then
   echo "$a -le $b: a 小于或等于 b"
else
   echo "$a -le $b: a 大于 b"
fi
2.7循环语句:

for:

for N in 1 2 3
do
echo $N
done

while:

#!/bin/bash
i=1
while (( i <= 3))
do 
 let i++
 echo $i
done

case:

#!/bin/bash
echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
    1)  echo '你选择了 1'
    ;;
    2)  echo '你选择了 2'
    ;;
    3)  echo '你选择了 3'
    ;;
    4)  echo '你选择了 4'
    ;;
    *)  echo '你没有输入 1 到 4 之间的数字'
    ;;
esac
2.8函数使用:

定义我们自己的函数并在shell脚本当中调用函数

#!/bin/bash
hello(){
 echo "hello world"
 echo "第一个参数为 $1"
 echo "第二个参数为 $2"
}
hello abc 123

3.Zookeeper

3.1 zookeeper 启动服务
/export/servers/zookeeper-3.4.9/bin/zkServer.sh start

查看状态:

/export/servers/zookeeper-3.4.9/bin/zkServer.sh status
3.2 zookeeper的特性
  1. 全局数据一致
  2. 可靠性
  3. 顺序性
  4. 数据更新原子性
  5. 实时性
3.3 zookeeper 的shell操作
  • zkCli.sh 进入命令行工具
  • create [-s] [-e] path data 创建节点(-s表示顺序节点,-e表示临时节点)
  • get path 获取 Zookeeper 指定节点的数据内容和属性信息
  • set path data 设置节点的数据内容
  • delete path 删除节点(若该节点存在子节点,无法删除该节点,必须先删除子节点,再删除父节点。)
  • Rmr path 递归删除节点
3.4 zookeeper 节点属性
  • PERSISTENT:永久节点
  • EPHEMERAL:临时节点
  • PERSISTENT_SEQUENTIAL:永久节点、序列化
  • EPHEMERAL_SEQUENTIAL:临时节点、序列化
3.5 zookeeper的javaAPI

创建永久节点:

/** 创建永久节点
  * @throws Exception
*/
@Test
public void createNode() throws Exception {
	RetryPolicy retryPolicy = new  ExponentialBackoffRetry(1000, 1);
    //获取客户端对象
    CuratorFramework client = CuratorFrameworkFactory.newClient("192.168.52.100:2181,192.168.52.110:2181,192.168.52.120:2181", 1000, 1000, retryPolicy);
    //调用start开启客户端操作
    client.start();
    //通过create来进行创建节点,并且需要指定节点类
    client.create().creatingParentsIfNeeded().
          withMode(CreateMode.PERSISTENT).forPath("/hello3/world");
        client.close();
}

修改数据:

/**
	 * 节点下面添加数据与修改是类似的,一个节点下面会有一个数据,新的数据会覆盖旧的数据
	 * @throws Exception
	 */
@Test
public void nodeData() throws Exception {
    RetryPolicy retryPolicy = new  ExponentialBackoffRetry(3000, 1);
    CuratorFramework client = CuratorFrameworkFactory.newClient("node01:2181,node02:2181,node03:2181", 3000, 3000, retryPolicy);
    client.start();
    client.setData().forPath("/hello5", "hello7".getBytes());
    client.close();
}

查询数据:

@Test
public void updateNode() throws Exception {
    RetryPolicy retryPolicy = new  ExponentialBackoffRetry(3000, 1);
    CuratorFramework client = CuratorFrameworkFactory.newClient("node01:2181,node02:2181,node03:2181", 3000, 3000, retryPolicy);
    client.start();
    byte[] forPath = client.getData().forPath("/hello5");
    System.out.println(new String(forPath));
    client.close();
}

watch机制:

  /** zookeeper的监听机制 */
    @Test
    public void watchnode() throws Exception {
        ExponentialBackoffRetry retry = new ExponentialBackoffRetry(1000, 3);
        CuratorFramework client = CuratorFrameworkFactory.newClient("node01:2181", retry);
        client.start();
        TreeCache cache = new TreeCache(client,"/hello5");
        cache.getListenable().addListener(new TreeCacheListener() {
            @Override
            public void childEvent(CuratorFramework curatorFramework, TreeCacheEvent treeCacheEvent) throws Exception {
                ChildData data =treeCacheEvent.getData();
                if(data!=null){
                    switch (treeCacheEvent.getType()){
                        case NODE_ADDED:
                            System.out.println("NODE_ADDED:"+data.getPath()+"数据:"+new String(data.getData()));
                            break;
                        case NODE_REMOVED:
                            System.out.println("NODE_REMOVED:"+data.getPath()+"数据:"+new String(data.getData()));
                            break;
                        case NODE_UPDATED:
                            System.out.println("NODE_UPDATED:"+data.getPath()+"数据:"+new String(data.getData()));
                            break;
                        default:
                            break;
                    }

                } else{
                    System.out.println( "data is null : "+ treeCacheEvent.getType());
                }           }
        });
        cache.start();
        Thread.sleep(500000000);
    }

4.网路编程

4.1 网络编程的三要素:
  • ip地址
  • 端口号
  • 传输协议(TCP、UDP)
4.2 IO通讯模式

阻塞 IO 和非阻塞 IO 这两个概念是程序级别的。主要描述的是程序请求操作系统IO 操作后,如果 IO 资源没有准备好,那么程序该如何处理的问题

  • 阻塞模式
  • 非阻塞模式

同步 IO 和非同步 IO,这两个概念是操作系统级别的。主要描述的是操作系统在收到程序请求 IO 操作后,如果 IO 资源没有准备好,该如何响应程序的问题

  • 同步模式
  • 非同步模式
4.3 RPC

RPC(Remote Procedure Call Protocol)远程过程调用协议。

你可能感兴趣的:(big,data)