Snackbar使用详解及其相关框架TSnackbar

article/2025/9/18 18:51:13

简述:

    Snackbar 是 Android design support library 中的一个组件,它的作用和Toast类似,显示吐司,但Snackbar的特别之处在于Snackbar显示的提示信息可以和用户交互,更好地获取用户反馈信息。同时,它显示的吐司带有动画效果,从屏幕下方慢慢展开显示。
    Goggle官方这样介绍:“SnackBars提供了一个轻量级的反馈操作。他们在屏幕的底部显示一条简短的信息,如果是较大的设备就显示在左下角。SnackBar出现在屏幕中所有其他元素的上方,同一时间仅仅只有一条SnackBar”。总之,SnackBar的特点大致下面几条:

        ①与Toast一样可以进行吐司信息;

        ②可以与用户交互操作;

        ③一个时刻只能有唯一一个 Snackbar 显示。

    我们先来感受一下它的强大吧,请看效果图:

                                           

基本使用方法

1、简单使用

                                            

    上面的效果图代码实现:

import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;public class MainActivity extends AppCompatActivity {private Button btn_show;private ViewGroup frameLayout;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initViews();}private void initViews() {frameLayout = (ViewGroup) findViewById(android.R.id.content);btn_show = (Button) findViewById(R.id.btn_show);btn_show.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Snackbar.make(view,"Hello SnackBar!",Snackbar.LENGTH_SHORT).show();}});}
}
    其实使用的核心代码就一句:

Snackbar.make(view,"Hello SnackBar!",Snackbar.LENGTH_SHORT).show();
    使用起来类似于Toast,但也有与Toast的不同之处,Toast的使用:

Toast.makeText(MainActivity.this, "真的能够交互", Toast.LENGTH_SHORT).show();
    他们的第一个参数不同,Toast第一个参数是Context,而Snackbar第一个参数为View,这个View就是Toast的父布局。与Toast不同的是Snackbar显示时长有三种:

      ①Snackbar.LENGTH_SHORT:与Toast.LENGHT_SHORT(大约1.x秒)一样显示较短时长后自动消失。

      ②Snackbar.LENGTH_LONG:与Toast.LENGHT_LONG(大约3秒)一样显示相对较长时间后自动消失。

      ③Snackbar.LENGTH_INDEFINITE:永不消失除非手动调用dismiss()方法去除Snackbar。

2、可交互的Snackbar

      刚才已经说过Snackbar比Toast强大,其中有一点就是Snackbar可以用来与用户交互,我们看一下效果:

                                                      

    核心代码:

  final Snackbar snackbar = Snackbar.make(frameLayout, "Hello SnackBar!", Snackbar.LENGTH_INDEFINITE);snackbar.setAction("OK?", new View.OnClickListener()                {@Overridepublic void onClick(View view) {// snackbar.dismiss();//doSomething}});snackbar.show();
    setAction(CharSequence text, View.OnClickListener listener)方法为用户交互的点击事件,第一个参数是点击事件的信息,第二个就是一个View.OnClickListener点击监听器。

3、可反馈的Snackbar

     Snackbar可以反馈指的是它可以监听Snackbar的显示与退出(也包括各种退出的类型的监听),来张效果图:

                                                       

    核心代码:

final Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "反馈监听的Snackbar", Snackbar.LENGTH_LONG);snackbar.setAction("能交互吗", new View.OnClickListener() {@Overridepublic void onClick(View view) {Toast.makeText(MainActivity.this, "真的能够交互", Toast.LENGTH_SHORT).show();}});snackbar.setCallback(new Snackbar.Callback() {@Overridepublic void onDismissed(Snackbar snackbar, int event) {super.onDismissed(snackbar, event);switch (event) {case Snackbar.Callback.DISMISS_EVENT_ACTION:Toast.makeText(MainActivity.this, "Snackbar通过Action的点击事件退出", Toast.LENGTH_SHORT).show();break;case Snackbar.Callback.DISMISS_EVENT_CONSECUTIVE:Toast.makeText(MainActivity.this, "Snackbar由于新的Snackbar显示而退出", Toast.LENGTH_SHORT).show();break;case Snackbar.Callback.DISMISS_EVENT_MANUAL:Toast.makeText(MainActivity.this, "Snackbar通过调用dismiss()方法退出", Toast.LENGTH_SHORT).show();break;case Snackbar.Callback.DISMISS_EVENT_SWIPE:Toast.makeText(MainActivity.this, "Snackbar右划退出", Toast.LENGTH_SHORT).show();break;case Snackbar.Callback.DISMISS_EVENT_TIMEOUT:Toast.makeText(MainActivity.this, "Snackbar自然退出", Toast.LENGTH_SHORT).show();break;}}@Overridepublic void onShown(Snackbar snackbar) {super.onShown(snackbar);Toast.makeText(MainActivity.this, "Snackbar显示", Toast.LENGTH_SHORT).show();}});snackbar.show();

监听的实现是通过CallBack接口实现的,setCallback(Snackbar.Callback callback):Snackbar的显示与隐藏的回调接口,在该接口中可以重写两个方法:一个是onShow()在Snackbar显示时回调,另一个是onDismissed()在Snackbar隐藏时回调。另外一点就是在onDismissed()方法中可以监听到Snackbar退出的五种原因类型:

        ①Snackbar.Callback.DISMISS_EVENT_SWIPE=0:Indicates that the Snackbar was dismissed via a swipe。

            该事件下Snackbar退出的原因是;意思是“Snackbar右划退出事件”,注意这个右划事件只有在父布局为CoordinatorLayout才会被触发,其他布局如LinearLayout、RelativeLayout等是不会出发的。

        ②Snackbar.Callback.DISMISS_EVENT_ACTION = 1:Indicates that the Snackbar was dismissed via an action click。

            该事件下Snackbar退出的原因是:Snackbar通过Action点击事件触发退出。

        ③Snackbar.Callback.DISMISS_EVENT_TIMEOUT = 2:Indicates that the Snackbar was dismissed via a timeout。

            该事件下Snackbar退出的原因是:Snackbar超出通过setDuration()方法所设置的规定时间后退出,这也是正常的自然退出。

        ④Snackbar.Callback.DISMISS_EVENT_MANUAL = 3:Indicates that the Snackbar was dismissed via a call to dismiss()。

            该事件下Snackbar提出的原因是:通过手动调用了dismiss()方法。

        ⑤Snackbar.Callback.DISMISS_EVENT_CONSECUTIVE = 4:Indicates that the Snackbar was dismissed from a new Snackbar being shown。

            该事件下Snackbar提出的原因:由于新的Snackbar的显示而退出。

4、自定义Snackbar

    在自定义Snackbar之前需要弄清Snackbar的内部构造,打开Snackbar源码可以看到其有一个内部类Snackbar.SnackbarLayout,该内部类就是Snackbar布局,然后找到Snackbar.SnackbarLayout的布局资源文件design_layout_snackbar_include.xml,打开该文件看到一个TextView(吐司左边的信息)和一个Button(显示SnackBar右侧与用户交互的按钮)。

<merge xmlns:android="http://schemas.android.com/apk/res/android"><TextViewandroid:id="@+id/snackbar_text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:paddingTop="@dimen/design_snackbar_padding_vertical"android:paddingBottom="@dimen/design_snackbar_padding_vertical"android:paddingLeft="@dimen/design_snackbar_padding_horizontal"android:paddingRight="@dimen/design_snackbar_padding_horizontal"android:textAppearance="@style/TextAppearance.Design.Snackbar.Message"android:maxLines="@integer/design_snackbar_text_max_lines"android:layout_gravity="center_vertical|left|start"android:ellipsize="end"android:textAlignment="viewStart"/><Buttonandroid:id="@+id/snackbar_action"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="@dimen/design_snackbar_extra_spacing_horizontal"android:layout_marginStart="@dimen/design_snackbar_extra_spacing_horizontal"android:layout_gravity="center_vertical|right|end"android:paddingTop="@dimen/design_snackbar_padding_vertical"android:paddingBottom="@dimen/design_snackbar_padding_vertical"android:paddingLeft="@dimen/design_snackbar_padding_horizontal"android:paddingRight="@dimen/design_snackbar_padding_horizontal"android:visibility="gone"android:textColor="?attr/colorAccent"style="?attr/borderlessButtonStyle"/></merge>
    如果我们能够获取到该View岂不是就能随意的更改一些Snackbar的背景样式、吐司信息、吐司文字的颜色及大小、交互按钮Button的颜色与文字大小等信息了吗?不错,Snackbar提供了一个getView()方法,这个方法就可以获取到Snackbar.SnackbarLayout的实例。那么下面就来尝试一下。

                                                   

    核心代码:

 final Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "自定义Snackbar", Snackbar.LENGTH_LONG);snackbar.setAction("是否OK", new View.OnClickListener() {@Overridepublic void onClick(View view) {Toast.makeText(MainActivity.this, "真的能够交互", Toast.LENGTH_SHORT).show();}});final Snackbar.SnackbarLayout snackbarView = (Snackbar.SnackbarLayout) snackbar.getView();if (snackbarView != null){//设置SnackBar背景与透明度snackbarView.setBackgroundResource(R.drawable.background);snackbarView.setAlpha((float) 0.4);//设置Action的字体颜色与大小final Button snackbar_action = (Button) snackbarView.findViewById(android.support.design.R.id.snackbar_action);snackbar_action.setTextColor(Color.RED);snackbar_action.setTextSize(convertSpToPixel(snackbarView.getContext(),10));//这是Text的文字颜色与大小final TextView snackbar_text = (TextView) snackbarView.findViewById(android.support.design.R.id.snackbar_text);snackbar_text.setTextColor(Color.RED);snackbar_text.setTextSize(convertSpToPixel(snackbarView.getContext(),10));//设置左侧iconDrawable drawable = ContextCompat.getDrawable(MainActivity.this, R.mipmap.ic_core);if (drawable != null) {drawable = fitDrawable(getResources(), drawable, (int) convertDpToPixel(24, MainActivity.this));} else {throw new IllegalArgumentException("resource_id is not a valid drawable!");}final Drawable[] compoundDrawables = snackbar_text.getCompoundDrawables();snackbar_text.setCompoundDrawables(drawable, compoundDrawables[1], compoundDrawables[2], compoundDrawables[3]);}snackbar.show();
   对于自定义我们首先得获取Snackbar的布局:

final Snackbar.SnackbarLayout snackbarView = (Snackbar.SnackbarLayout) snackbar.getView();

    拿到布局以后我们可以对Snackbar的背景和透明度进行设置:

snackbarView.setBackgroundResource(R.drawable.background);
snackbarView.setAlpha((float) 0.4);
    还记得刚才我们看的Snackbar的布局文件吗?里面就是一个TextView和一个Button,如果我们想要对他们进行自定义我们可以先拿到他们的布局view,首先我们看一下Button:

final Button snackbar_action = (Button) snackbarView.findViewById(android.support.design.R.id.snackbar_action);
    我们拿到Button实例之后就可以对其进行自定义了:

snackbar_action.setTextColor(Color.RED);
snackbar_action.setTextSize(convertSpToPixel(snackbarView.getContext(),10));
    我们在对Snackbar里的TextView进行自定义:

final TextView snackbar_text = (TextView) snackbarView.findViewById(android.support.design.R.id.snackbar_text);
    对其设置字体大小和字体颜色:

snackbar_text.setTextColor(Color.RED);
snackbar_text.setTextSize(convertSpToPixel(snackbarView.getContext(),10));
    对于TextView本身来说还有一个方法就是可以通过setCompoundDrawables(left,top,right,bottom)设置图标Icon,现在我们对Snackbar里的TextView进行左侧图标Icon的设置:

//设置左侧iconDrawable drawable = ContextCompat.getDrawable(MainActivity.this, R.mipmap.ic_core);if (drawable != null) {drawable = fitDrawable(getResources(), drawable, (int) convertDpToPixel(24, MainActivity.this));} else {throw new IllegalArgumentException("resource_id is not a valid drawable!");}final Drawable[] compoundDrawables = snackbar_text.getCompoundDrawables();snackbar_text.setCompoundDrawables(drawable, compoundDrawables[1], compoundDrawables[2], compoundDrawables[3]);
    这里的代码还用到的方法如下:

/*** 方法描述:将drawable压缩为指定宽高的drawable** @param resources* @param drawable  原始drawable* @param sizePx    指定的drawable压缩宽高* @return*/private static Drawable fitDrawable(Resources resources, Drawable drawable, int sizePx) {if (drawable.getIntrinsicWidth() != sizePx || drawable.getIntrinsicHeight() != sizePx) {if (drawable instanceof BitmapDrawable) {drawable = new BitmapDrawable(resources, Bitmap.createScaledBitmap(getBitmap(drawable), sizePx, sizePx, true));}}drawable.setBounds(0, 0, sizePx, sizePx);return drawable;}/*** 方法描述:将Drawable转化为Bitmap** @param drawable* @return*/private static Bitmap getBitmap(Drawable drawable) {if (drawable instanceof BitmapDrawable) {return ((BitmapDrawable) drawable).getBitmap();} else if (drawable instanceof VectorDrawable) {return getBitmap((VectorDrawable) drawable);} else {throw new IllegalArgumentException("unsupported drawable type");}}/*** 方法描述:将VectorDrawable转化为Bitmap** @param vectorDrawable* @return*/@TargetApi(Build.VERSION_CODES.LOLLIPOP)private static Bitmap getBitmap(VectorDrawable vectorDrawable) {Bitmap bitmap = Bitmap.createBitmap(vectorDrawable.getIntrinsicWidth(),vectorDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);vectorDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());vectorDrawable.draw(canvas);return bitmap;}
     好了,Snackbar的基本用法已经差不多了,现在封装一个Snackbar的工具类吧!!!

5、封装工具类

import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.VectorDrawable;
import android.os.Build;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v4.content.ContextCompat;
import android.util.TypedValue;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;/*** 类描述:Snackbar工具类* Created by lizhenya on 16/7/14.*/
public class SnackbarUtil {private static Snackbar.SnackbarLayout getSnackbarLayout(Snackbar snackbar) {final Snackbar.SnackbarLayout snackbarView = (Snackbar.SnackbarLayout) snackbar.getView();return snackbarView;}public static Snackbar shortMake(View view, CharSequence message) {final Snackbar snackbar = Snackbar.make(view, message, Snackbar.LENGTH_SHORT);return snackbar;}public static Snackbar shortMake(View view, int messageId) {final Snackbar snackbar = Snackbar.make(view, messageId, Snackbar.LENGTH_LONG);return snackbar;}public static Snackbar longMake(View view, CharSequence message) {final Snackbar snackbar = Snackbar.make(view, message, Snackbar.LENGTH_SHORT);return snackbar;}public static Snackbar longMake(View view, int messageId) {final Snackbar snackbar = Snackbar.make(view, messageId, Snackbar.LENGTH_LONG);return snackbar;}public static Snackbar indefiniteMake(View view, CharSequence message) {final Snackbar snackbar = Snackbar.make(view, message, Snackbar.LENGTH_INDEFINITE);return snackbar;}public static Snackbar indefiniteMake(View view, int messageId) {final Snackbar snackbar = Snackbar.make(view, messageId, Snackbar.LENGTH_INDEFINITE);return snackbar;}/*** 方法描述:设置Snackbar的透明度** @param snackbar* @param alpha*/public static void setSnackbarAlpha(Snackbar snackbar, float alpha) {final Snackbar.SnackbarLayout snackbarView = getSnackbarLayout(snackbar);if (snackbarView == null) return;snackbarView.setAlpha(alpha);}/*** 方法描述:设置Snackbar的背景颜色** @param snackbar* @param color*/public static void setSnackbarBackgroundColor(Snackbar snackbar, int color) {final Snackbar.SnackbarLayout snackbarView = getSnackbarLayout(snackbar);if (snackbarView == null) return;snackbarView.setBackgroundColor(color);}/*** 方法描述:设置Snackbar的背景图片资源** @param snackbar* @param resId*/public static void setSnackbarBackgroudResource(Snackbar snackbar, int resId) {final Snackbar.SnackbarLayout snackbarView = getSnackbarLayout(snackbar);if (snackbarView == null) return;snackbarView.setBackgroundResource(resId);}/*** 方法描述:设置Snackbar中Action的字体颜色** @param snackbar* @param color*/public static void setActionTextColor(Snackbar snackbar, int color) {//snackbar.setActionTextColor(color);final Snackbar.SnackbarLayout snackbarView = getSnackbarLayout(snackbar);if (snackbarView == null) return;final Button snackbar_action = (Button) snackbarView.findViewById(android.support.design.R.id.snackbar_action);snackbar_action.setTextColor(color);}/*** 方法描述:设置Snackbar中Action的字体大小** @param snackbar* @param size     Action的字体大小(单位为sp)*/public static void setActionTextSize(Snackbar snackbar, float size) {final Snackbar.SnackbarLayout snackbarView = getSnackbarLayout(snackbar);if (snackbarView == null) return;final Button snackbar_action = (Button) snackbarView.findViewById(android.support.design.R.id.snackbar_action);snackbar_action.setTextSize(sp2px(snackbarView.getContext(), size));}/*** 方法描述:设置SnackBar左侧TextView控件的文字颜色和大小** @param snackbar* @param color    TextView控件的文字颜色* @param size     TextView控件的文字大小*/public static void setTextColorAndSize(Snackbar snackbar, @Nullable int color, @Nullable float size) {final Snackbar.SnackbarLayout snackbarView = getSnackbarLayout(snackbar);if (snackbarView == null) return;final TextView snackbar_text = (TextView) snackbarView.findViewById(android.support.design.R.id.snackbar_text);if (color != 0) {snackbar_text.setTextColor(color);}if (size != 0) {snackbar_text.setTextSize(size);}}/*** 方法描述:在Snackbar左侧添加icon** @param snackbar      Snackbar实例* @param drawableResId 添加的icon资源ID* @param sizeDp        icon的宽度与高度值*/public static void setIconLeft(Snackbar snackbar, int drawableResId, float sizeDp) {final Snackbar.SnackbarLayout snackbarView = (Snackbar.SnackbarLayout) getSnackbarLayout(snackbar);if (snackbarView == null) return;//snackbar不同于Toast,snackbar依赖于Activity而存在final Context mContext = snackbarView.getContext();if (mContext == null) {return;}final TextView snackbar_text = (TextView) snackbarView.findViewById(android.support.design.R.id.snackbar_text);Drawable drawable = ContextCompat.getDrawable(mContext, drawableResId);if (drawable != null) {drawable = fitDrawable(mContext.getResources(), drawable, (int) convertDpToPixel(sizeDp, mContext));} else {throw new IllegalArgumentException("resource_id is not a valid drawable!");}final Drawable[] compoundDrawables = snackbar_text.getCompoundDrawables();snackbar_text.setCompoundDrawables(drawable, compoundDrawables[1], compoundDrawables[2], compoundDrawables[3]);}/*** 方法描述:将drawable压缩为指定宽高的drawable** @param resources* @param drawable  原始drawable* @param sizePx    指定的drawable压缩宽高* @return*/private static Drawable fitDrawable(Resources resources, Drawable drawable, int sizePx) {if (drawable.getIntrinsicWidth() != sizePx || drawable.getIntrinsicHeight() != sizePx) {if (drawable instanceof BitmapDrawable) {drawable = new BitmapDrawable(resources, Bitmap.createScaledBitmap(getBitmap(drawable), sizePx, sizePx, true));}}drawable.setBounds(0, 0, sizePx, sizePx);return drawable;}/*** 方法描述:将Drawable转化为Bitmap** @param drawable* @return*/private static Bitmap getBitmap(Drawable drawable) {if (drawable instanceof BitmapDrawable) {return ((BitmapDrawable) drawable).getBitmap();} else if (drawable instanceof VectorDrawable) {return getBitmap((VectorDrawable) drawable);} else {throw new IllegalArgumentException("unsupported drawable type");}}/*** 方法描述:将VectorDrawable转化为Bitmap** @param vectorDrawable* @return*/@TargetApi(Build.VERSION_CODES.LOLLIPOP)private static Bitmap getBitmap(VectorDrawable vectorDrawable) {Bitmap bitmap = Bitmap.createBitmap(vectorDrawable.getIntrinsicWidth(),vectorDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);vectorDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());vectorDrawable.draw(canvas);return bitmap;}/*** 方法描述:dp转化为px** @param dpValue* @param context* @return*/private static float convertDpToPixel(float dpValue, Context context) {return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,dpValue, context.getResources().getDisplayMetrics());}/*** sp转px** @param context* @param spVal* @return*/public static int convertSpToPixel(Context context, float spVal) {return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,spVal, context.getResources().getDisplayMetrics());}public static int sp2px(Context context, float spValue) {final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;return (int) (spValue * fontScale + 0.5f);}}

顶部展示的SnackBar

     文章最后介绍一个第三方框架。系统默认的Snackbar是从屏幕底部弹出的,如果想要改变其弹出位置可以将其父控件置于想要弹出的屏幕位置,但是即使这样做也不能改变动画,现在介绍一个从顶部弹出的Snackbar框架TSnackbar,github链接:https://github.com/AndreiD/TSnackBar

                                                         



Snackbar使用源码下载:http://download.csdn.net/detail/u012810020/9594379


http://chatgpt.dhexx.cn/article/DCu4P09k.shtml

相关文章

HAWQ:基于 Hessian 的混合精度神经网络量化

HAWQ&#xff1a;基于 Hessian 的混合精度神经网络量化 摘要动机方法海森方法的有效性分析海森矩阵方法推导根据幂迭代求海森矩阵的最大特征值根据海森矩阵最大特征值确定量化精度与顺序 实验结果ResNet20 On CIFAR-10ResNet50 on ImageNetSqueezeNext on ImageNetInception-V3…

HAWQ技术解析(二) —— 安装部署

一、安装规划1. 选择安装介质 HAWQ的安装介质有两种选择&#xff0c;一是下载源码手工编译&#xff0c;二是使用Pivotal公司提供的HDB安装包。源码的下载地址为 http://apache.org/dyn/closer.cgi/incubator/hawq/2.0.0.0-incubating/apache-hawq-src-2.0.0.0-incubating.tar.…

HAWQ取代传统数仓实践(二)——搭建示例模型(MySQL、HAWQ)

一、业务场景 本系列实验将应用HAWQ数据库&#xff0c;为一个销售订单系统建立数据仓库。本篇说明示例的业务场景、数据仓库架构、实验环境、源和目标库的建立过程、测试数据和日期维度的生成。后面陆续进行初始数据装载、定期数据装载、调度ETL工作流自动执行、维度表技术、事…

HAWQ从0.5开始安装说明.包含hadoop和hawq

文档是从自己的云笔记中复制,格式什么的可能有问题.已修复了一遍. 零.前提 一.安装hadoop 1.1下载并复制hadoop2.6.5 1.2编辑系统配置文件 1.3创建hadoop的tmp临时目录 1.4开始修改配置文件 1.5复制hadoop到其他所有节点上 1.6开始初始化hadoop 1.7 如果服务器重启了,…

开源数据库HAWQ,架构调研

hawq的简介 https://cloud.tencent.com/developer/article/1433137 HAWQ&#xff0c;全称Hadoop With Query&#xff08;带查询Hadoop&#xff09;。HAWQ使企业能够获益于经过锤炼的基于MPP的分析功能及其查询性能&#xff0c;同时利用Hadoop堆栈。HAWQ是一个Hadoop原生大规模…

apache hawq

为什么80%的码农都做不了架构师&#xff1f;>>> 资料地址&#xff1a; 导航页 What is HAWQ? HAWQ Architecture How HAWQ Manages Resources Understanding the Fault Tolerance Service Table Distribution and Storage Choosing the Table Distribution Pol…

HAWQ技术解析(一) —— HAWQ简介

一、SQL on Hadoop 过去五年里&#xff0c;许多企业已慢慢开始接受Hadoop生态系统&#xff0c;将它用作其大数据分析堆栈的核心组件。尽管Hadoop生态系统的MapReduce组件是一个强大的典范&#xff0c;但随着时间的推移&#xff0c;MapReduce自身并不是连接存储在Hadoop生态系统…

《HAWQ-V3: Dyadic Neural Network Quantization》论文阅读

HAWQ-V3阅读笔记 Abstract 混合精度量化&#xff0c;integer-only&#xff0c; Methodology 只采用均匀量化 权重对称量化&#xff0c;激活非对称量化&#xff0c;对量化步长S采用静态量化&#xff0c;采用per-channel的量化方式 3.1量化矩阵的乘法与卷积&#xff08;核心…

HAWQ手动安装

HAWQ手动安装及使用手册 1 HAWQ简介 HAWQ 是 Pivotal 设计的一个大规模并行 SQL 分析处理引擎&#xff0c;支持事务处理。HAWQ 将复杂的查询分割成简单的任何&#xff0c;并分发到并行处理系统中的处理单元执行。包括查询规划器、动态管道、前沿互联和查询执行优化器等等。提…

HAWQ上安装PXF插件,并访问HDFS文件数据

1、说明 HAWQ在github上的地址为&#xff1a;https://github.com/apache/hawq 在安装pxf插件之前&#xff0c;可以先查看一下基础软件对应的版本信息&#xff1a;在hawq目录下的pxf/gradle.properties文件中 因我在安装pxf之前&#xff0c;已经把hadoop及hawq安装完&#xff…

HAWQ技术解析(五) —— 连接管理

服务器启动后&#xff0c;还要经过一系列配置&#xff0c;才能被客户端程序所连接。本篇说明如何配置客户端身份认证&#xff0c;HAWQ的权限管理机制&#xff0c;HAWQ最常用的命令行客户端工具psql及与mysql命令行常用命令类比&#xff0c;最后还将列举一些客户端连接HAWQ数据库…

HAWQ-V3: Dyadic Neural Network Quantization论文学习

论文链接 https://arxiv.org/abs/2011.10680 摘要 目前的低精度量化算法往往具有从浮点值到量化整数值的来回转换的隐藏代价。这种隐藏的成本限制了通过量化神经网络所实现的延迟改进。为了解决这个问题&#xff0c;我们提出了HAWQ-V3&#xff0c;一个新的混合精度纯整数量化框…

HAWQ取代传统数仓实践(一)——为什么选择HAWQ

一、HAWQ取代传统数仓实践&#xff08;一&#xff09;——为什么选择HAWQ 为了跟上所谓“大数据”技术的脚步&#xff0c;从两年前开始着手实践各种SQL-on-Hadoop技术&#xff0c;从最初的Hive&#xff0c;到SparkSQL&#xff0c;再到Impala&#xff0c;进行了一系列ETL、CDC、…

在centos 7.3上进行Apache HAWQ集群安装部署

一、前期准备工作 1、准备三台物理机&#xff0c;master&#xff08;192.168.251.8&#xff09;,dataserver1&#xff08;192.168.251.9&#xff09;,dataserver2&#xff08;192.168.251.10&#xff09;&#xff1b; 2、目前最新版本是2.4.0&#xff0c; 官网下载地址&…

HAWQ

为了跟上所谓“大数据”技术的脚步&#xff0c;从两年前开始着手实践各种SQL-on-Hadoop技术&#xff0c;从最初的Hive&#xff0c;到SparkSQL&#xff0c;再到Impala&#xff0c;进行了一系列ETL、CDC、多维数据仓库、OLAP的实验。作为一名从业20年以上的DBA&#xff0c;从数据…

HAWQ技术解析(三) —— 基本架构

HAWQ是一个Hadoop原生的SQL查询引擎&#xff0c;它结合了MPP数据库的关键技术和Hadoop的可扩展性。HAWQ在原生的HDFS上读写数据&#xff0c;MPP架构使HAWQ表现出超越其它SQL on Hadoop解决方案的查询性能&#xff0c;Hadoop又为HAWQ提供了传统数据库所不具备的线性扩展能力。 一…

HAWQ技术解析(十三) —— 资源管理

一、HAWQ如何管理资源 HAWQ使用多种机制管理CPU、内存、I/O、文件句柄等系统资源&#xff0c;包括全局资源管理、资源队列、强制资源使用限额等。 1. 全局资源管理 Hadoop通常使用YARN全局管理资源。YARN是一个通用的资源管理框架&#xff0c;为MapReduce作业或其…

HAWQ个人学习笔记(一)——HAWQ介绍

一、什么是HAWQ&#xff1f; HAWQ是Hadoop原生SQL查询引擎&#xff0c;针对分析性的应用。它具有大规模并行处理很多传统数据库以及其他数据库没有的特性及功能&#xff0c;结合了MMP数据库的关键技术优势和Hadoop的可扩展性和便利性。读写依赖于HDFS。 注&#xff1a;Hadoop…

全面讲解光纤、光模块、光纤交换机、光模块组网设计与案例

光纤组网已是当今建筑智能化弱电行业里一种常见的组网方式&#xff0c;组建远距离无线、监控网络时&#xff0c;往往需要使用光纤进行连接通信&#xff0c;使用光纤收发器是经济适用型做法&#xff0c;尤其是在室外的使用。其实光纤收发器不仅可以成对使用&#xff0c;还可以配…

400G光模块的相关知识

现在的高速光模块市场慢慢从100G向400G转移&#xff0c;未来400G必定是主流的高速光模块&#xff0c;目前这个阶段占领主流的还是100G&#xff0c;之前100G的相关知识已经讲述过了&#xff0c;400G与100G的传输速率由各种因素导致&#xff0c;我们讲讲400G与100G的信号传输。 4…