zero_copy

基本概念

用户态与内核态

机器的资源是固定的,应用程序进程却有很多,如果无节制的使用资源会导致系统崩溃。所以必须要对进程使用何种资源进行限制,由此权限的不同可以分为用户态和内核态。处于内核态中的程序可以说为所欲为。内核态像外管理硬件资源,像内管理操作系统中的进程,内存等资源。用户态和内核态的划分可以表示为

阅读全文

Java安装

为什么 Java 8 仍是主流

如今 Java 已经出到了 14,为啥子大家还是在用 Java 8。你有没有为这个困惑过呢。其实接受新事物都有这样的规律,一是新事物有足够的吸引力,大家主动去追求。二是旧事物被强制扼杀,只能转向新事物。

阅读全文

Hadoop安装与基本配置

Mac 上安装 Hadoop

Hadoop的三种运行模式

  • Local (Standalone) Mode 独立运行模式,Hadoop 默认的配置,运行在单个 java 进程中,常用于调试
  • Pseudo-Distributed Mode 伪分布式模式,Hadoop 不同功能组件运行在不同进程,但是都运行在一个节点上
  • Fully-Distributed Mode 完全分布式模式,Hadoop 运行在多个节点上

伪分布式启动 Hadoop

修改配置文件

以下需要注意的是,如果配置文件不存在,可以从对应的 .template 模板文件复制或者重命名。

  1. ${HADOOP_HOME}/etc/hadoop/core-site.xml,修改 Hadoop 的默认文件系统,配置 Hadoop 临时文件目录。默认在 /tmp/hadoop-${user.name}

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <configuration>
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
    </property>
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/usr/local/hadoop-2.7.2/tmp</value>
    </property>

    </configuration>
  2. ${HADOOP_HOME}/etc/hadoop/hdfs-site.xml,配置副本数

    1
    2
    3
    4
    5
    6
    <configuration>
    <property>
    <name>dfs.replication</name>
    <value>1</value>
    </property>
    </configuration>
  3. 配置SSH

  4. ${HADOOP_HOME}/etc/hadoop/mapred-site.xml

    1
    2
    3
    4
    5
    6
    <configuration>
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>
    </configuration>
  5. ${HADOOP_HOME}/etc/hadoop/yarn-site.xml

    1
    2
    3
    4
    5
    6
    <configuration>
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>
    </configuration>

启动 HDFS

  1. 格式化 NameNode,多次格式化的时候有坑,主要原因是 DataNode 不认识格式化后的 NameNode,后面详细说。如果不先格式化 NameNode,start-hdfs.sh 的时候就不会启动 NameNode。
    1
    hdfs namenode -format
  2. 启动 HDFS
    1
    start-hdfs.sh
  3. jps 查看 HDFS 相关的进程是否启动成功。
  1. 访问 localhost:50070,启动成功会看到 HDFS 的 web ui,可以查看 HDFS 的状态和基本信息。

  2. 测试创建目录,上传文件。在 web ui 上可以查看文件。文件到底存在了 HDFS 的什么地方呢。和 hadoop.tmp.dir 的文件设置路径有关。
    hadoop.tmp.dir/dfs/data 里。真实的文件目录层级比较深,比如我这个是在 tmp/dfs/data/current/BP-1094310977-192.168.102.5-1588517605135/current/finalized/subdir0/subdir0/blk_1073741825。相应的 NameNode 的数据在 /tmp/dfs/name/current 下面。

    1
    2
    hadoop fs -mkdir -p /user/test
    hadoop fs -put etc/hadoop/core-site.xml /user/test

启动 Yarn

  1. 启动 YARN,jps 查看是否有相关进程。
    1
    start-yarn.sh
  2. 打开 localhost:8088 可以看到 Yarn 的 web UI
  3. 测试运行 Map Reduce 程序,一开始运行了几次都不成功,UI 上查看日志显示 /bin/java 文件或者目录不存在。需要配置 hadoop-env.sh,yaer-env.sh,mapred-env.sh 中的 JAVA_HOME。
    1
    hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/test/input  output

Docker 搭建 Hadoop 集群(WIP)

构建基础镜像,组装服务

一开始的想法很简单,想的就是 docker-compose 构建三个 centos 容器并组网。emmmm,其实没有考虑容易互联,通过 link 和 expose 开放端口的方式还没有尝试。这里先存下目前处理的东西

  1. 编写 Dockerfile 构建基础镜像,安装 jdk,vim, curl, wget, ntp等搭建环境所需软件包。

  2. 根据基础镜像,docker-compose 组装服务

集群配置分发

编写分发脚本,rsync 或者 scp,一般是 rsync,速度快,只同步差异。emmm,编写的脚本也比较简单,按规律循环遍历节点,执行 rsync,接收要分发的内容作为参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if [[ $# -eq 0 ]]; then
echo "no params";
exit;
fi

path=$1

file_name=`basename $path`

dir=`cd -P $(dirname ${file_name}); pwd`

user=`whoami`
for((host=1; host<4; host++)); do
echo ------------------- hadoop$host --------------
rsync -rvl $dir$file_name $user@hadoop$host:$dir
done

SSH 配置

参考 配置SSH

NTP 时间同步

设置一台服务器作为时间服务器,其他服务器定期从时间服务器同步时间,保证多台结点时间一致。参考 ntp 时间服务器同步

启动整个集群

修改 Hadoop 配置文件,emmm,按照上面伪分布式搭建的修改就行,只不多 ResourceManager, default.FS 等需要替换成我们部署该进程的节点域名。并且编写 /etc/slaves用于指定该集群的子节点。所有修改完毕后,分发脚本。
start-dfs.sh 启动 HDFS 集群,注意要在启动 NodeManager 的节点上执行
start-yarn.sh 启动 yarn 集群,注意要在启动 ResourceManager 的节点上执行
mr-jobhistory-daemon.sh start historyserver 启动历史服务器,主要要在 historyserver 的节点上执行

注意事项

  • 只有在第一次启动的时候,执行 hadoop namenode format,不要多次执行

SSH配置

什么是 SSH

ssh 是一种网络协议,用于计算机之间的加密登录。大致流程如下

阅读全文

transform - transformations chain

前言

transform 是一个灵活的转换算子,接收一个自定义的函数作为参数来处理计算逻辑。它最大的功能是链接多个自定义的转换算子,简化代码,将相似的计算统一起来。本文会通过两个例子来介绍 transform 的功能。

阅读全文

Hadoop是什么

Hadoop

Hadoop 是海量数据分布式存储和计算框架,脱身于 Google 三大论文。现在我们常说的 Hadoop 往往指的是 Hadoop 生态圈。

阅读全文

UDAF - User Defined Aggregate  Functions

前言

UDF 是基于列的自定义处理函数。UDAF 是基于多行的自定义处理函数。UDAF 用于 Untyped Dataset,Aggregator 用于处理自定义 Scala 对象构成的数据集的聚合。本文主要以三个例子来实现简单的 UDAF 和 Aggregator。

阅读全文

UDF - User  Defined  Functions

前言

Spark 本身提供的算子可以满足我们大多数的需求,并且我们可以组合各种算子,但是计算处理逻辑往往是复杂的。有些转换逻辑需要我们自定义函数才可以实现,这些自定义函数就是 UDF。UDF 是基于列的函数,拓展了 Spark SQL DSL,用于转换数据集。

阅读全文

Build In Functions

前言

需要处理的数据结构往往是复杂的,在 Spark 中该如何操作 Map,Array,struct 这些结构呢?Spark 已经为我们提供了很多内置函数来处理这一切。这些函数大多定义在 org.apache.saprk.sql.functions。

阅读全文
使用搜索:谷歌必应百度