《大数据平台之Linux、Java、Scala》 扫二维码继续学习 二维码时效为半小时

(0评价)
价格: 899.00元

启动网卡

ifup eth0

clear

service httpd start

netstat -tulnp

 

[展开全文]

vim  /etc/resolv.conf

ping www.baidu.com -c 2

修改nameserver后就ping不通了

vim /etc/hosts 将ip翻译成地址

主机名 当前机器名称

hostname

/etc/services

网络服务别名

 

[展开全文]

netstat -antp vs netstat -atp

l =listen状态

 

[展开全文]

sysctl | fgrep swap

sysctl -a | fgrep swap

free

 

[展开全文]

#cd /usr/lib/jvm

#cd jre/lib

#jar -tf rt.jar | fgrep String

java test <=>java -cp ./test

cp=>classpath

system的类加载器。

java anti-patterns

JNI=java native interface,用c/c++写的动态链接库,

-so文件

heap占用内存最大

[展开全文]

序列化以IO为继承,首先IO。

package cn.chinahadoop.test;
import java.io.BufferReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutpotStream;
import java.io.InptStreamReader;

public class Test{
    public static void main(String[]args) throws IOException{
        FileOutputStream stream=new FileOutputStream(new File("testoutput"));
        stream.write("你好".getByte());//将char[]数组转换为byte[]数组
        //改为stream.write("你好".getByte(UTF-8));后会出现乱码
        BufferedReader bin = new BufferedReader(new InputStreamReader(new FileInputStream("testoutput")));
        //编解码要指定类型统一,在解码中说明解码格式则不会报错 BufferedReader bin = new BufferedReader(new InputStreamReader(new FileInputStream("testoutput"),"UTF-8"));
        String s=null;
        while((s=bin.readLine())!=null){
            System.out.println(s);
        }
        bin.close();
    }
}

 

在linux下#vim Test.java,#javac Test.java

#java Test 对于win7报错的UTF-8会正常显示,在win7下汉字用gbk默认编码,而在linux下为utf-8。

socket 网络中不同实体不同进程之间交互,

很多服务会有默认端口,web服务80,ssh服务 22端口,一个网络服务就是一个上层应用。

对于同一个端口只能有同一个监听的进程。

##netstat -antp | fgrep 18824

##telnet 127.0.0.1 18824

现在可以是客户端,发起请求,输入hellp server,则对应在eclipse输出hello server,在控制台输入hello client,在ssh里面收到结果并输出。

import java.io.InputStreamReader
import java.io.PrintWriter
import java.net.IntetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class App {
    public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket();
        InetSocketAddress address = new InetSocketAddress("localhost", 18824);
        server.bind(address);
        Socket socket = server.accept();

        BufferedReader reader = new BufferedReader(new InputStreamReader(
            socket.getInputStream()));
        PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
        BufferedReader keyword = new BufferedReader(new InputStreamReader(
            System.in));
        while (true) {
            if (reader.ready()) {
                String info = reader.readLine();
                System.out.println("Client:" + info);
            }
            if (keyword.ready()) {
                String test = keyword.readLine();
                writer.println(test);
                System.out.println("Server:" + test);
            }
        }
    }
}
//Socket——数据传输(前一页文本代码)

 

1:52

 

 

 

 

 

[展开全文]

 

package cn.chinahadoop.test;
import java.io.IOException;
import java.util.SitSet;

public class Test{
    public static void main(String[]args)throws IOException{
        BitSet bits1=new BitSet(8);

        for (int i=0;i<8;i++){
            if((i%2)==0)
                bits1.set(i);
        }
        System.out.println("Inital pattern in bits1: ");
        System.out.println(bits1);
    }
}      

 

 

package cn.chinahadoop.test;
import java.io.IOException
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Test{
    pulic static void main(String[] args) throws IOException{
        List<String>list=new ArrayList<String>();
        list.add("a");
        list.add("b");
        list.add("c");

        Iterator<String>iter=list.iterator();
        while(iter.hasNext)(){
            String ele=iter.next();
            if ("a".equals(ele)){
                iter.remove();
            }
        }
    }
}

 

 

 

package cn.chinahadoop.test;
import java.io.IOException
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Test{
    pulic static void main(String[] args) throws IOException{
        List<String>list=new ArrayList<String>();
        Iterator iter=list.iterator();
        iter.hasPrevious;//会报错,原因是父类中没有hasPrevious方法

    }
}

键值对也可以遍历,但是map没有iterator属性

[展开全文]

Error & Exception 给调用的人看

RunTimeException 不需要提前说明

子类不能比父类抛出更多的异常

try是用来捕获异常的

要想之后throw,之前必须先“说一下”

(new Exception()).printStackTrace(); 虽不正统,但是可以用来帮助理解程序的函数调用。

注意:抛异常的代价是很大的,不要用于正常的程序逻辑

Hadoop中的一些Java应用:

复习一些已经学过的内容,工业级的例子也有说服力。

1、Hadoop背景:主流的分布式计算和存储平台。分布式系统的资源一般有cpu,mem,disk(hdfs分布式文件系统,有点像百度云)

2、NameNode.java是hdfs的一个管理实体(DataNode)。每一个disk有一个java进程来管理,DataNode就是每一个disk实体。NameNode就是主控实体。

main为什么一定是static的?

3、一般情况下,异常不会被吞掉,而是处理之后,再抛出去。

spark在计算上,要比Hadoop更加快捷一些。

深入面向对象

对象(状态、行为)是类的一个实例。

构造函数通过new调用,构造函数至少一个(若没有定义,就是无参构造函数)。

但是,一旦申请了一个有参构造函数,无参构造函数需要显式声明。

注意:一个类中的static属性,是所有它的对象共享的!!!!这个属性是可以不new对象的,直接用 类名.属性名 访问。

由于非static方法或者属性是要基于对象而产生的,所以static方法不能调用非static方法。

return要覆盖所有可能的逻辑执行分支。

封装就像是管理上的调整:你就是君主,对象不能总是由你直接指挥。

Java里不支持多继承。基本的继承就是继承部分和个性部分。(implements和接口有关,以后讲。接口里面的方法是没有实现的)

先调用父类的构造函数,再调用自己的构造函数。

如果子父类的构造函数参数个数不同呢?怎么办?

Java中所有的类都是Object的继承类。

[展开全文]
public class test{
        public static void main(String[] args){
            System.out.println("args 1 is " +args[0]);
            System.out.println("hello world!")
        }
}

javac test.java ##传入的参数也可以通过命令行读入。

java test haha 

javac为jdk中的工具,java编译器

生成test.class字节码文件,可以在java虚拟机上执行

public class test{
        public static void main(String[] args){
            System.out.println("hello world!");
        }
}

主类,test,入口为main.

#javac test.java

#java test

rsync test.class dx2-1:/root

将.class迁移致另一台机器。

##ll -tr

java test##同一个程序在不同的机器上可以执行

平台无关性。

 

tar zxvf ***.tar.gz 

先装jdk,再装eclipse

指定工作目录,代码以项目的形式组织的。

new -java project(后面可选择maven)

选择javaSE 1.8(等价于java8)

生成test project

点击test project 右键 new -class

默认所有class首字母大写,calss 名字为Test.

在下面勾上public static void main.

自动生成代码,不用手工 来敲击

ctrl+F11(快捷键)

package test;
//import java.io.File;  ctrl+shift+o 自动匹配类
public class Test{
    static int a;
    public static void main(String[] args){  
        int b=0;//局部变量编译无法通过,会强制加上初始值  
        System.out.println("Hello World!");
        System.out.println("a is" +a);  //尽管a没有赋值,但是输出默认值0
        System.out.println("b is" +b);
        File file =new File("A");
    }
}

程序左侧单击,出现断电,run-debug按钮,出现提示框,点击yes,转换为debug模式

F6 单步执行

windows-prospective可以切换不同的prospective

选择run-run configurations-arguments(命令行参数)-run

,输入haha,输出结果

src=>source 存放源代码

包名跟目录一一对应,包名cn.chinahadoop,目录也如此。

ctrl+shift+r

查找所需要的文件

jre提供了大量的系统文件,用file导入文件

空行缩进 ctrl+shift+F(format)自动对齐,java本身可以解析,但是代码洁癖用户无法忍受。

也可自己定义format

默认值,没有定义时会有默认值

对象类型都是null

任何对象都是class new生成,

通过引用来访问类,近似c的指针。

package cn.chinahadoop.test
import java.io.File;

public class Test{
    static int a;
    public static void main(String [] args){
        int b;
        String s=new String("abc"); //通过new将类实例化,java 虚拟机在heap里面分配内存,会有指针,叫reference,指向这一对象,string为一个类
//对象s为引用类型的变量。
        boolean ok=true;//对布尔类赋值
    }
}

 

类的属性可以不用事先赋予初始值,java虚拟机会指定默认值。

引用类型需要new一下。

byte表示数字,字符用char来表示

byte a='a';

System.out.println("a is "+a);//输出97

强制类型转换

注意变量作用域,局部变量只能在花括号里面有效。

package cn.chinahadoop.test
import java.io.File;

public class Test{
    static int a;
    public static void main(String [] args){
        int a=101;
        {
             int a=100;   //内部的冲突,内部的可以看见外部的a,而反之则不能,代码冲突,需要将内层的修改为int b=100;
        }
        System.out.println("a is" +a);
}

面向对象中,static只能访问static的。

package cn.chinahadoop.test
import java.io.File;

public class Test{
    static int a;
    public static void main(String [] args){
        try{
        
        } catch(Exception e){
            e.getMessage();// 处理异常,try catch语句,抛出错误信息。
        }
        e.getMessgae();//在外面看不见异常信息,报错
    }
}

局部变量原则:1,在花括号里面的只能在花括号里面调用;2在花括号前面的参数,例如args,e只能在后面紧跟的花括号内有效。

string定义字符串

String s="abc";

String ss=new String("abc");

面试题 string 产生对象个数?

别人在使用定义的类也需要导入

import cn.hadoop.test.Test;

java.io  为包名,File为类名

出于安全控制引入包机制。

同一个包内不允许有同名的类。

修饰符 限制访问权限。

package cn.chinahadoop.test
import java.io.File;

public class Test{
    static int a;

    public static class Dog{
        protected void afun(){};
    }
    public static void class LittleDog extends Dod{
//extends关键字扩展dog表明继承关系
        public void afun(){};
//这里方法可以是public,protected,但不可以是private,上述等价于下面
        Dog dog=new Dog();
        dog.afun();
//当Dog类下面afun方法为private时,则这里无法访问afun方法


            private void bfun(){
                afun();//父类方法为protected,可以被子类访问
            }

    public static void main(String [] args){
        final int ok;
        ok=1;
        String s="abc";
        String ss=new String("abc");
    }
}

 

简单记忆,青出于蓝属于蓝,不能越做越小

权限控制 private<protected<public,记忆方法,原因在面向对象章节会讲述。

一个java 文件最外层的只能有一个public class,内层可以嵌套多个。

对于引用变量,只能用一次,引用变量内的属性可以用多次。

package cn.chinahadoop.test
import java.io.File;
//class-->object
public class Test{
    static int ok=0;
    public static class Dog{
        public String name;
        static void afun(){//static也可以修饰方法
        }
    }
    public static void main(String[] args){
        final Dog ok;
        ok=new Dog();//这里只能重复一次,ok是final变量,只能用一次
        ok.name="dog1";
        ok.name="dog2";//可以出现多次

    }

extends声明为子类

引用相当于C的指针,认为ok指向一块内存,内存有属性name,java不需要free

package cn.chinahadoop.test
import java.io.File;
//class-->object
public class Test{
    static int ok=0;
    public static private afun{
     
        }
    int ok2=0;
    public static void main(String[] args){
        Test test1=new Test();
        Test test2=new Test();
        test1.ok=1;
        test1.ok2=2;
        System.out.println("ok is" + test2.ok);//输出结果为1,尽管只是修改了test1,static表示在内存中只有一份ok,ok是大家共享的一个变量
                System.out.println("ok2 is" + test2.ok2); //输出结果为0,因为int ok2=0;没有声明为static
    }
}

static方法没有产生新东西。

static方法访问非static属性是禁止的

单行与多行效果相同,换行符不影响解析

ctrl+/ 选中后加注释

+ ==>字符串连接

在vim环境中注释,

<ctrl+v> jjjj

I <esc>+<esc> 更加复杂

<ctrl+v> 启动列编辑

在chrome中输入

chrome://flags

假如停用,点击启用即可

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[展开全文]

第一本参考书类似字典,第二本重点看,快速上手,第三本有难度。


source /etc/profile
echo $SCALA_HOME
echo $PATH
$SCALA_home/bin

mkdir code
cd code
ls
touch Test.scala
vim Test.scala
scalac Test.scala  ##编译文件,scalac可以对应javac
ll    ###出现class文件
scala Test  ###输出结果

先编译,再执行

IDE  eclipse内置scala支持

string并非基本类型

没有必要使用return语句,最后一行为返回值

 

 

val x=1
var y=2
1.to(10)
1 to 10
val x=1
if(x>0)1 else -1
val a=if(x>0) 1 else -1
1 to 10
1 until 10
0 until 10
Range(1,10)
Range(1,10,2)  ##指定步长
Range(1,15,2)
Range(1,15,3)

 

for(i<-1 until 20) println(i)

for(i<-1 until 20 if i%2 ==0) println(i)
lazy val x=2

 

 

[展开全文]

复习:

类,对象,方法

javac *.java

java * (a b c)

Java中可以存在多个包含main方法的类,此时需要定义主入口类(Eclipse - Run Configuration)。main之间是可以相互调用的。

命令行中,java 主类名 即可

循环控制与C一样(for, while, do-while, break, continue),for多了一种:

int[] array = {1, 2, 3};

for (int  a : array){System.out.print(a);}

String一旦创建,不可更改!

String a = "abc"; a = a + "ef";

这两句话一共产生了两个String 对象

!!!String 相等问题!!!

尽可能节省空间。

常量是在编译过程中生成的(好似符号表,所以分配在内存中),在运行过程中,不会被回收。

Autoboxing:当需要使用基本类型相对应的引用类型时,在使用恰当时,会自动进行。

StringBuffer在申请内存时,好似C++中的vector。

StringBuffer线程安全,但性能可能受影响。所以有StringBuilder,性能会好一些。

System.exit(int status); 就像return status;

数组和C基本上一样,不过,[]更像是*,而不是分配空间。

ArrayList更像是StringBuffer,后面再讲。

基本类型是值传递,引用类型是引用传递。

 

[展开全文]

Java虚拟机是对机器作比操作系统更高的抽象

JAVA JRE运行 + JAVA JDK开发

[展开全文]

mkfifo命名管道 进程间通信(terminal)

[展开全文]

1.hda5之后均为扩展分区

2.fdisk 查看磁盘状况

3.df 不同分区挂载目录查询

[展开全文]

一 IDE:

1scala-ide

2idea

[展开全文]

fdisk -l

parted -l

df -h

 

parted   /dev/xvdc

help  看帮助

mklabel

gpt

 

mkpart

part1

1

10G

print

mkfd ext4 /dev/xvdc1

 

mkdir /data1

mount /dev/xvdc1  /data1

 

 

 

 

 

[展开全文]

安装centos步骤:

1. 搜索、下载、安装virtualBox

--进入virtualBox,虚拟机命名、类型、版本选择,分配内存,分配硬盘大小;

2. 下载centos安装包(操作系统 www.centos.org/download)下载

在虚拟机中找一个虚拟光驱,将iso文件装入

3. 执行安装过程

先进行诸多设置,之后启动安装。

[展开全文]